RewriteCond混乱

时间:2011-05-01 23:11:41

标签: mod-rewrite apache2

我有以下重写设置:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^.*$ web.php [L]

我想要的是非文件和目录被api.php或web.php(它们自己的路由)捕获,其余的则返回文件或目录。但是,mod_rewrite看作'/'的主路由''没有被捕获 - 我想这是因为/是一个目录 - 根。

如何解决这个问题,以便在保持目录可访问的同时进入web.php?

2 个答案:

答案 0 :(得分:1)

首先,您需要将规则中的REQUEST_URI更改为REQUEST_FILENAME。见http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

  

REQUEST_URI:请求的资源   HTTP请求行。

     

REQUEST_FILENAME:完整的本地   文件系统到文件或脚本的路径   匹配请求。

然后,添加另一条规则:

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]

所以最终的结果是:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)? web.php [NC,L]

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]

答案 1 :(得分:0)

语法:RewriteBase URL-path

URL路径可以是根相对路径或空。空URL路径值表示规则库将等于网站根目录。