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

问题描述:

I am using below htaccess rules on my website's root folder to remove the files extensions and add trailing slash at the end. However, I'd like to exclude a sub-directory /sub-dir/ from the root folder htaccess rules. I tried to add another htaccess to the /sub-dir/ folder and put RewriteOptions inherit or RewriteEngine Off in the file but none of them works.

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]

Any suggestion is highly appreciated.

Thanks

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

  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] 
 
  #删除尾部斜杠:
RewriteRule(。*)/ $ $ 1 [L] 
 
#现在测试没有斜杠:
RewriteCond%{REQUEST_FILENAME} .php -f 
RewriteRule。  %{REQUEST_FILENAME} .php [QSA,L] 
  code>  pre> 
 
 

我们非常感谢任何建议。 p>

谢谢 p> div>

You can either try adding an htaccess file in your subdirectory that has only this:

RewriteEngine On
RewriteRule ^ - [L]

Without any inherit options. Inherit means you want the rules in the parent htaccess to also be applied along with any rules in the subdirectory's htaccess file. With this, you're making sure the rewrite engine is on and making a "do nothing" pass-through rule.

Otherwise, you can add the passthrough at the top of the root's htaccess file (right below RewriteBase):

RewriteRule ^sub-dir/ - [L]