Hi everyone, 

I'm trying to track down a problem with rewrite rules. I have set up a 
WordPress multisite installation. In the root directory of this installation, 
there's a .htaccess file which contains some rewrite rules. I've copy&pasted 
the content of the .htaccess file to the bottom of this email.

The problem is: When someone requests a non-existent file in /wp-content/ or 
one of its subfolders, like
http://foo.bar/wp-content/non-existent-file.txt, or
http://foo.bar/subdir/wp-content/non-existent-file.txt
then they end up with an error 500 and the following message appears in my 
error.log: "Request exceeded the limit of 10 internal redirects due to probable 
configuration error."

Expected behaviour would be that Apache serves an error 404 page.

This problem has been reported in the WordPress bugtracker, but there's some 
confusion on what the ideal fix should look like:
https://core.trac.wordpress.org/ticket/20746

It has been suggested in the discussion on that ticket that there's a problem 
with this directive:
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]

This rewrite rule is supposed to rewrite request URIs like 
"/subdir/wp-content/something" to "/wp-content/something". Moreover, I think 
that it's supposed to prevent request URIs like "/wp-content/something" from 
being rewritten to "index.php" by the last rewrite rule. Expected behaviour 
would be that such requests are served by Apache without invoking WordPress. 

I understand that request URIs like /wp-content/something match the pattern of 
the above rewrite rule. I don't understand, though, why the redirect loop 
occurs. Shouldn't this rewrite rule leave URIs like /wp-content/something 
unchanged (because the substituted URI is the same as the original URI)? And 
shouldn't Apache stop the rewriting process if a request URI hasn't been 
changed during the latest loop through .htaccess? 

This is the content of my .htaccess file, which is located in the root 
directory of my WordPress installation:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

# don't rewrite if request URI points to existing file or folder
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Is there something wrong with these?
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Greets, 
Thomas
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to