How to exclude a directory from WordPress permalinks in a Multisite environment?

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

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x