利用apache的mod_rewrite做URL规则重写
使用mod_rewrite做url重写,伪静态,做过很多次,这次用几个例子记下来,便于后面查用。
使用方法:
1.在conf目录的httpd.conf文件中找到:
LoadModule rewrite_module modules/mod_rewrite.so
2.在要支持url rewirte的目录启用 Options FollowSymLinks和AllowOverride All
<Directory "D:/WAMP/Mypro/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
这样通过http://localhost/Mypro/访问时,/Mypro/和其下面的子目录将支持url rewrite。
3.在Mypro根目录下添加.htaccess文件,添加规则:
RewriteEngine on
#针对phpcms的url结构
RewriteRule ^content-([0-9]+)-([0-9]+)-([0-9]+).html index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3
-----------------------------
下面给三个浅显易懂的例子:
<1>
RewriteEngine on
RewriteCond $1 !(index.php|images)
RewriteRule ^(.*)$ /index.php?page=$1 [L]
RewriteEngine on:开启Rewrite
RewriteCond $1 !(index.php|images):如果文件不为index.php或目录不为images。
RewriteRule ^(.*)$ /index.php?page=$1:转给index.php处理。
$1代表引用RewriteRule中的第一个正则(.*)代表的字符。RewriteCond中的正则很普通,所以不做说明。RewriteRule中的正则,(.*)代表任意字符,^是开始锚,$是结束锚。
设置之后,当访问dmyz.org/about时,实际是访问dmyz.org/index.php?page=about,从url中省略掉了index.php。这一规则经常用于框架开发环境,因为大多数框架都是将所有的请求提交给一个入口文件(通常是index.php)来处理的。
将第三行修改:
RewriteRule ^(.*).htm$ /index.php?page=$1
访问dmyz.org/about.htm时实际访问的仍然是dmyz.org/index.php?page=about,这就实现简单的伪静态了。
------------------------------
<2>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /.htm
用这个简单的例子来说明重写条件(RewriteCond)使用的服务器变量和特殊正则。
%{REQUEST_FILENAME}获得一个服务器变量的值,!-f是正则,其中感叹号表否定,-f用来检测当前值所代表的路径是否是一个常规文件。因此例2实现的是:当访问的文件不是一个常规文件时,转到404.htm页面。这就是一个简单的用Rewrite实现404页面重定向的例子。还可以补充一下,将其修改为:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
#如果当前变量所代表的路径不是一个常规目录
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /.htm
------------------------------
<3>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^pageid=(.*)?$ [NC]
RewriteRule ^index(.*)$ http://dmyz.org/thread.php?fid=%1 [R=,L]
本例中使用了配置指令,和重写规则对重写条件的引用。
如例2所说,重写条件可以使用服务器变量和特殊正则,但重写规则不可以。所以需要在重写规则中反向引用重写条件的内容。例3中使用%1来反向引用(.*)?。当查询字符串为pageid=任意字符串时,跳转到thread.php?fid=任意字符串。这条正则很适合网站搬家、更换程序后,将原地址转向到新地址。
前两个例子,重写条件和重写规则都只有两个参数——正则和字符串,本例中追加第三个参数,它被称为标识,跟在重写条件和重写规则之后的,作为辅助、补充之用。本例中使用了最简单三个标识:
[NC]:忽略大小写。
[L]:结尾标识。停止重写操作,并不再应用其他重写规则。防止本条规则被后续规则影响。
[R=301]:利用HTTP 301跳转。
----------------------------------------------------
一个常见的问题:配置完rewrite后有时会显示Forbidden You don't have permission to access /Mypro/blog/ on this server.这样的错误。
加上Options FollowSymLinks就行了,注意不能加Indexes,这个表示显示目录(根目录没有index.html的情况下就显示文件夹的目录结构)。
实际上mod_rewrite是针对目录的,因此并不需要将httpd.conf中的所有AllowOverride None改为AllowOverride All,Options也一样。
利用apache的mod_rewrite做URL规则重写的更多相关文章
- Apache Nginx URL 地址 重写
URL重写这东西在工作中用了很多次了,但每次都忘记了要记得把知道的积累下来. 哎,要么认为没必要,要么就是没时间?! 一.Apache 篇 官方地址:http://man.chinaunix.net/ ...
- thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...
- Apache的Mod_rewrite学习(RewriteRule重写规则的语法)
URL:http://www.tenwe.com/tech/web/server/200705/content_1548.shtml 今天学习重写规则的语法.RewriteRuleSyntax: Re ...
- Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结
一. 简单实例介绍一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置: 1)在httpd.conf文件里 ...
- Apache的Mod_rewrite学习(RewriteRule重写规则的语法) 转
RewriteRuleSyntax: RewriteRule Pattern Substitution [flags] 一条RewriteRule指令,定义一条重写规则,规则间的顺序非常重要.对Apa ...
- Ubuntu系统下允许Apache的mod_rewrite功能
首先,使能apache的rewirte模块,在shell里输入下边的命令: sudo a2enmod rewrite 然后重启一下webserver使更改生效 sudo service apache2 ...
- Url Rewrite 重写
前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索 ...
- Apache htaccess 中的RewriteCond 规则介绍 (转)
apache 模块mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...
- Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}
1.给子域名加www标记 RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\ ...
随机推荐
- Delphi天气预报查询
Delphi天气预报查询 天气预报接口api(中国天气网) 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) 真正的中国天气api接口xml,json(求加精) ...
- Keil 二进制数输入宏
源:http://hi.baidu.com/skystalker/item/e7679cd79c6f751220e250c1?qq-pf-to=pcqq.c2c 在C语言中有十进制,十六进制,八进制; ...
- javascript 中获取对象的长度(map对象的长度)--js关联数组的长度
var n = {1:100, 2:101, 3:102, 4:103}; 怎么获取这个对象n的长度呢? 方法一: function getLength(obj){ var count = 0; fo ...
- PAT (Advanced Level) 1002. A+B for Polynomials (25)
为0的不要输出. #include<iostream> #include<cstring> #include<cmath> #include<algorith ...
- DM二维码识别库DMDECODER的使用--MFC例程
DM码和QR码是当今比较主流的二维码,其中QR码容量大,容量密度为16kb,DM码容量要小一点,可在仅仅25mm²的面积上编码30个数字,但是DM码的容错率更高,所以实际的工业生产中经常使用DM码作为 ...
- JS中Exception处理
程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...
- webservice-概念性学习(一)
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 学习webservice之前呢,我想说我们先学习以下的知识,对你以后的学习 ...
- ajax--2017年1月15日
听说点六下就能复制了? ajax: 一般处理程序(数据接口):ashx 跨语言传递数据:xml: 结构不清晰 代码量比较大 查找起来比较费事 非面向对象结构 json: 结构清晰 代码量相对较小 面向 ...
- iOS开发——沙箱
iphone沙箱模型的有三个文件夹,documents,tmp,Library.有时开发时要求我们保存一些数据在本地,这就用到了. 1.Documents 目录:您应该将所有de应用程序数据文件写入到 ...
- Linux cronolog
1. 关于本文 本文将以cronolog 1.6.2.apache 2.2.6为例,以CentOS 5为平台,讲述cronolog的安装和设置. 2. 关于cronolog cronol ...