Apache Rewrite拟静态配置 htaccess rewrite

kevin.Zhu 发布于:2013-1-16 0:16 分类:Apache  有 14 人浏览,获得评论 0 条  

1、mod_rewrite简介和配置
Rewrite主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态、拟目录、域名跳转、防止盗链等。

------------------------------------------------------------------------
Apache配置:
支持httpd.conf配置和目录.htaccess配置

一、启用rewrite
#LoadModule rewrite_module modules/mod_rewrite.so去除前面的#
LoadModule rewrite_module modules/mod_rewrite.so

如果是在根目录建立.htaccess,则只需要上面这步就可以。


二、启用.htaccess
搜索.htaccess找到
AllowOvrride None 修改为AllowOverride All

<Directory />
 
 
 
 Options FollowSymLinks
 
 
 
 AllowOverride ALL
 
 
 
 Order deny,allow
 
 
 
 Deny from all
 
 
 
 #Require all denied
</Directory>

----------------------------------------------------------------------------

2、mod_rewrite规则的使用

RewriteEngin on --启动rewrite引擎
RewriteCond%{HTTP_HOST}!^www.php100.com [NC] --判断主机 NC不区分大小写
RewriteRule ^/(.*)http://www.php100.com/[L] --跳转到

地址不等于第二条地址,则跳转到第三条

RewriteEngine on --启动rewrite引擎
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1
RewriteRule ^/new([0-9]*)/$/new.php?id=$1[R]
 --跳转到


----------------------------------------------------------------------------

3、mod_rewrite 规则修正符
R强制外部重定向
F禁止URL,返回403HTTP状态码
G强制URL为GONE,返回410HTTP状态码
P强制使用代理转发
L表明当前规则是最后一条规则,停止分析以后规则的重写
N重新从第一个规则开始运行重写过程
C与下一条规则联系

如果规则匹配则正常处理,一下修正符无效

T=MIME-type(force MIME type)强制MIME类型
NS只用于不是内部子请求
NC不区分大小写
QSA追加请求字符串
NE不再输出转义特殊字符 "\=$1" 等价于 =$1


例子:

RewriteEngine on
rewriteRule ^/test/t_(.*).html$ /test/test.php?id=$1

RewriteEngine on
RewriteRule ^/echoid_(.*).html$ /echoid.php?id=$1

RewriteEngine on
RewriteRule ^/szfashionun2/tcdg_(.*).html$ /szfashionun2/tcdg.php?link_package=$1

写入httpd.conf中
1、其实就是正则表达式的一种替换。
2、用 /test/t_任意.html 代替 /test/test.php?id=$1

路径要写正确,到localhost的根目录中去

--------------------------------------------------------------------


这是直接在Apache上直接更改,一般虚拟服务器是不允许的,这时候可以在根目录下建立.htaccess文件,同样放置同样的内容即可(错误:同样的代码放.conf中有效,但是放入.htaccess中失效)。
windows下应该这样,linux下则没问题
RewriteEngine on
rewriteRule ^t_(.*).html$ /test.php?id=$1

RewriteEngine on
RewriteRule ^szfashionun2/tjtc.html$ /szfashionun2/tjtc.php
.htaccess文件写在根目录中,前面比写入httpd.conf中的少了/

可以查看文章
Windows 平台下 Apache .htaccess 失效问题

测试平台: Windows XP SP3, Apache 2.2, .htaccess 放于根目录下
RewriteRule  ^/abc$ /index.php  (httpd.conf 中有效,.htaccess 中无效)
RewriteRule  ^abc$  /index.php  (httpd.conf 中无效,.htaccess 中有效)
移植规则时注意行首 / 即可。语法并没有错误,所以日志文件没有任何记载。

要常常按enter,不要常F5,经常出不来


制作.htaacess的工具
http://tool.liehuo.net/htaccess/cn.php