【发布时间】:2014-11-27 20:28:01
【问题描述】:
我在网站根目录中有一个.htaccess 文件,其规则如下:
Options -MultiViews
Options All -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA]
还有一个子目录中的.htaccess 文件(我们称之为Foo):
Order Allow,Deny
Deny from all
<files ~ "\.(js|jpe?g|png|gif|bmp|css)">
Allow from all
</files>
当我访问例如:/test/test/test 时,它通常会将我重定向到 index.php,但是当我的 URI 从现有目录开始时,它会引发 403 错误,例如:/Foo/test/test/test => 403 错误
所以我的问题是:如何让它重定向到index.php,即使它与现有的子目录匹配?
注意:Sub-Directoy 必须包含一个 .htaccess 文件以禁止直接访问其中的文件。
另一个问题:如何使除(图像、css、js)之外的所有请求(甚至是现有文件和目录)转到index.php?url=$1?当我删除RewriteCond %{REQUEST_FILENAME} !-f时,它会重定向到@ 987654332@或给Internal Error
【问题讨论】:
-
如果您在特定目录中覆盖 .htaccess,则该 .htaccess 现在负责让“合法”路由通过。因此,如果您有 100 个目录,每个目录都有自己的 .htaccess 文件,那么您有 100 倍的责任让这些 .htaccess 文件允许您需要的基本路由。
标签: php apache .htaccess mod-rewrite redirect