从根文件夹中的htaccess规则中排除子目录

时间:2014-10-22 03:23:05

标签: php apache .htaccess url-redirection trailing-slash

我在我网站的根文件夹下使用htaccess规则以删除文件扩展名并在末尾添加尾部斜杠。但是,我想从根文件夹htaccess规则中排除子目录/ sub-dir /。我尝试将另一个htaccess添加到/ sub-dir /文件夹,并将RewriteOptions inheritRewriteEngine Off放入文件中,但它们都不起作用。

RewriteEngine On
RewriteBase /

# redirect from non-www to www
RewriteCond %{HTTP_HOST} ^mywebsite.com.au$ [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com.au/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/index.php$
RewriteRule ^(.*)index.php$ http://www.mywebsite.com.au/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ $1.php [L]

# Remove trailing slash:
RewriteRule (.*)/$ $1 [L]

# Now test without the trailing slash:
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_FILENAME}.php [QSA,L]

任何建议都受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:6)

您可以尝试在只包含 的子目录中添加htaccess文件:

RewriteEngine On
RewriteRule ^ - [L]

没有任何继承选项。继承意味着您希望父htaccess中的规则也与子目录的htaccess文件中的任何规则一起应用。通过这种方式,您可以确保重写引擎处于打开状态,并且无需执行任何操作即可。传递规则。

否则,您可以在根的htaccess文件顶部添加直通(在RewriteBase下方):

RewriteRule ^sub-dir/ - [L]