我有以下重写设置:
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 :(得分: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路径值表示规则库将等于网站根目录。