.htaccess规则简单实例

很久以前我研究过apache的rewrite规则(见:PJblog转Wordpress文章地址重定向),其实这方面的东西还有很多都没搞懂,今天想到又来学习一下,并写了个例子。


RewriteEngine on
RewriteRule test/([a-z0-9\-]+\.html)$ test/test\.php\?id=$1
#实现伪静态将/test/1.html 映射到/test/test.php?id=1

RewriteCond %{QUERY_STRING} ^id=([a-z0-9\-]+)$
RewriteRule ^(.*)$ /test/%1\.html? [R=301,L]
#将test/test.php?id=1 用301重定向到 /test/1.html

实现的效果:
访问/test/1.html时,web服务器会把实际请求转发给/test/test.php?id=1
当访问/test/test.php?id=1时,规则又把该地址用301重定向到/test/1.html

几点摘要:
RewriteRule反向引用$N
(0 <= N <= 9)引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!)。 所以上面规则中的$1表示的第一个RewriteRule圆括号的内容。(如有多个圆括号正则,则用$2 $3….)

RewriteCond反向引用%N
(1 <= N <= 9)引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。 所以规则中%1引用的是rewritecond中 id后门圆括号内的成分。

RewriteRule 规则主要是写在这里面
RewriteCond 定义重写发生的条件 如例子中的RewriteCond 表示只有出现id=([a-z0-9\-]+)$ 才使用下面的规则。(这里的$是正则里的结尾)

有篇Apache的rewrite规则详细介绍,摘过来备份

Leave a Comment