相信熟悉Web Server的人一定熟悉Apahce。相信熟悉Apahce的人一定知道URL Rewrite。Apache的mod_rewrite模块,可以帮助人们构造出各种各样美化后的URL。在Apache中使用URL Rewrite,可以有多种方式:一种是直接在httpd.conf中添加相应rewriterule(重写规则),另一种是在网站根目录下的.htaccess中添加rewriterule(重写规则)。但是,需要注意的是,在这两个文件中添加到URL重写规则略有不同。而这些不同,对于不熟悉的人来说,很可能会困扰许久。
在Httpd.conf中:
(1)Request URI的开头必须以斜线开始;
(2)在寻找Cache文件的时候,必须在开头加上斜线;
(3)在使用-f或者!-f的时候,必须在开头加上斜线。
在.htaccess中,情况完全相反:
(1)Request URI的开头不能有斜线;
(2)在寻找Cache文件的时候,不能在开头加上斜线;
(3)在使用-f或者!-f的时候,不能在开头加上斜线。
简单而言,就是在httpd.conf中,重写前后的URL在使用绝对路径时需要添加斜线“/”,表示从网站根目录开始;而在.htaccess中,则不需要。以下两个简单的例子:
httpd.conf
RewriteRule ^/$ /cache/index.html [QSA]
RewriteRule ^/([^.]+)$ /cache/$1.html [QSA]
RewriteCond /home/root/%{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [QSA,L]
.htaccess
RewriteRule ^$ cache/index.html [QSA]
RewriteRule ^([^.]+)$ cache/$1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
或许还有更多的不同,大家也可以自己关注研究一下。