我在网站根目录中有一个.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
=&gt; 403错误
所以我的问题是:即使它与现有的子目录匹配,如何将其重定向到index.php
?
注意:Sub-Directoy必须包含.htaccess文件才能禁止直接访问其中的文件。
另一个问题:如何将除(图像,css,js)之外的所有请求(甚至是现有文件和目录)转到index.php?url=$1
?当我删除RewriteCond %{REQUEST_FILENAME} !-f
时它会重定向到index.php?url=index.php&url=$1
或提供Internal Error
答案 0 :(得分:1)
保持你的root .htaccess:
Options All -Indexes -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)$ [NC]
RewriteCond %{REQUEST_URI} !(^/index\.php|\.(js|jpe?g|png|gif|bmp|css))$ [NC]
RewriteRule ^ /index.php?url=%1 [QSA,L]
将/Foo/.htaccess
保持为:
RewriteEngine On
RewriteOptions Inherit
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !\.(js|jpe?g|png|gif|bmp|css)$ - [F,NC]
RewriteOptions Inherit
将继承父.htaccess allow/deny
更好地使用mod_rewrite
来更好地控制