2

The scenario is as follows:
A multisite install with three sites:

  • site1.com (admin)
  • site2.com
  • site3.com

Q: How to exclude a folder located in the root directory, which should also be associated with site3.com?

That is: exclude a particular directory that does not belong to WordPress so that it is accessible from: site3.com/folderToExclude/

Back in the day site3.com was a stand-alone site (now is part of the mentioned MU install), and this rule used to work:

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$

but that's no longer the case.

This is what the file looks like:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) WordPress_04/$1 [L]
RewriteRule ^(.*\.php)$ WordPress_04/$1 [L]

RewriteRule . index.php [L]

</IfModule>
# END WordPress
2
  • "site3.com was a stand-alone site" - what is it now? You shouldn't have to do anything to exclude a physical directory, as this should be excluded by default by the standard WP directives in .htaccess. So, I'm wondering why you even needed the directive as posted "back in the day"? (That should only have been an optimisation at best.) Please include the contents of your .htaccess file - maybe there is something else going on? – MrWhite Mar 14 at 10:51
  • Thanks MrWhite. I was under the impression that a rule on the .htaccess file was a must in order to exclude a folder from a WordPress install. I've updated the post to include the current content of the file. – Nils Mar 16 at 7:04
0

This "exception" would only be required if you are requesting virtual URLs within /folderToExclude, as opposed to physical files. Any requests to physical directories and files are naturally excluded by the standard WordPress directives.

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

This condition (RewriteCond directive) won't do anything where you've put it. RewriteCond directives don't do anything by themselves, they apply to the first RewriteRule directive that follows. In this case, the above rule is checking that the request URL-path matches /wp-admin and does not start /foldertoExclude/ - the condition is always successful (if A=B then A!=C), so is not doing anything.

However, as written, you couldn't place that condition on the later rule either since the logic is reversed. (Maybe you've used this in the past on a single-site WordPress install?)

Remove that RewriteCond directive entirely.

Rather than modifying the WordPress code block you should create an additional rule before the # BEGIN WordPress section, to exclude all requests that start /folderToExclude from being processed at all by the WordPress directives.

For example:

# Exclude specific directories
RewriteRule ^folderToExclude($|/) - [L]

# BEGIN WordPress
:

No need to repeat the RewriteEngine directive. No other RewriteCond directives are necessary.

An alternative is to create another .htaccess file in the /folderToExclude directive with a single RewriteEngine Off (or On) directive. This will then override the WordPress mod_rewrite directives in the parent .htaccess file.

1
  • Thank you for taking the time to respond with such precision and detail, MrWhite. I've marked accepted your answer. Not only solved my doubts but also taught me a lot. Thanks! – Nils Mar 31 at 10:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.