相信熟悉Web Server的人必定熟悉Apahce。相信熟悉Apahce的人必定知道URL Rewrite。Apache的mod_rewrite模块,能够帮助人们构造出各类各样美化后的URL。在Apache中使用URL Rewrite,能够有多种方式:一种是直接在httpd.conf中添加相应rewriterule(重写规则),另外一种是在网站根目录下的.htaccess中添加rewriterule(重写规则)。可是,须要注意的是,在这两个文件中添加到URL重写规则略有不一样。而这些不一样,对于不熟悉的人来讲,极可能会困扰许久。php
在Httpd.conf中:
(1)Request URI的开头必须以斜线开始;
(2)在寻找Cache文件的时候,必须在开头加上斜线;
(3)在使用-f或者!-f的时候,必须在开头加上斜线。html
在.htaccess中,状况彻底相反:
(1)Request URI的开头不能有斜线;
(2)在寻找Cache文件的时候,不能在开头加上斜线;
(3)在使用-f或者!-f的时候,不能在开头加上斜线。sql
简单而言,就是在httpd.conf中,重写先后的URL在使用绝对路径时须要添加斜线“/”,表示从网站根目录开始;而在.htaccess中,则不须要。如下两个简单的例子:安全
httpd.conf
RewriteRule ^/$ /cache/index.html [QSA]
RewriteRule ^/([^.]+)$ /cache/$1.html [QSA]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]composer
.htaccess
RewriteRule ^$ cache/index.html [QSA]
RewriteRule ^([^.]+)$ cache/$1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]网站
或许还有更多的不一样,你们也能够本身关注研究一下。spa
例如 一个 写在 .htaccess 中的..code
<IfModule mod_rewrite.c> #禁止 全部访问.... <Files ~ "^.(htaccess|htpasswd|info.php|(\S)+.md|(\S)+.sql)$"> deny from all </Files> # 禁止访问 vendor.... <Location /vendor> Deny from all </Location> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>
而写在 httpd.conf 中的.htm
#ThinkPhp 安全 配置... <IfModule mod_rewrite.c> #禁止 全部访问.... <Files ~ "^.(htaccess|htpasswd|info.php|(\S)+.md|(\S)+.sql)$"> deny from all </Files> # 禁止访问 vendor.... composer 所在目录... <Location /vendor> Deny from all </Location> <Location /ThinkPhp> Deny from all </Location> Options +FollowSymlinks RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>
在 写的 时候....出现了 bug .......暂时这样解决的..blog
httpd.conf
<IfModule mod_rewrite.c> #ThinkPhp 安全 配置... #禁止 全部访问.... <Files ~ "^.(htaccess|htpasswd|info.php|(\S)+.md|(\S)+.sql)$"> deny from all </Files> # 禁止访问 vendor.... composer 所在目录... <Location /vendor> Deny from all </Location> <Location /Thinkphp> Deny from all </Location> </IfModule>
.htaccess
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>