2011-05-01 153 views
0

我有以下重写设置:的RewriteCond混乱

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,同时保持目录可访问?

回答

0

语法:RewriteBase URL路径

URL路径可以是根相对路径或空的。空的URL路径值意味着规则库将等于网站根。

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]