2

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

Webnerdoz
  • 155
  • 1
  • 6
  • 15

1 Answers1

11

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]
Jon Lin
  • 142,182
  • 29
  • 220
  • 220