Skip to content Skip to sidebar Skip to footer

Rewriteengine In .htaccess To Catch Files Not Ending In Html

I'd like to use mod rewrite in to convert web page addresses like /directory to /directory/index.html, in a standard LAMP hosting situation. What I have works for addresses that en

Solution 1:

Use a RewriteCond directive to check whether the URL path does not end with a .html:

RewriteCond %{REQUEST_URI} !\.html$
RewriteRule ^(.*[^/])?/?$$1/index.html [L]

Edit   You’re using a look-ahead assertion ((?!…)). But there isn’t anything after .* (only a $). So try a look-behind assertion instead:

RewriteRule ^.*$(?<!html) $0/index.html [L]

But note that you probably need Apache 2.2 to use these assertions.

Solution 2:

Well, for actually making it work, you could just use a negative lookbehind instead of a lookahead:

RewriteRule ^(.*)(?<!html)$ $1/index.html [L]

I'm not sure offhand why adding the 'x' makes it work, I'll edit if I figure it out.

Solution 3:

For why adding the x makes it work: If the replacement will match the regex, the RewriteRule will be applied again. As an example, this causes an error:

RewriteRule ^(.*)$ $1.rb

because it would replace script with script.rb. That matches the regex, so it replaces script.rb with script.rb.rb, again and again...

This is hinted at in the error log:

Request exceeded the limit of10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary.

In your example, you add index.html to the end. When there is an x at the end of the regex, then it won't match your replacement, which ends in an l.

Post a Comment for "Rewriteengine In .htaccess To Catch Files Not Ending In Html"