Question

RewriteEngine on

I have following code:

RewriteCond %{REQUEST_URL} ^$
RewriteRule ^files/(.*)$ getfile.php?file=$1 [L]

RewriteRule  ^(.+)/index([0-9]*).html$ index.php?path=$1/&page=$2 [QSA]
RewriteRule  ^(.+).html$ index.php?path=$1.html [QSA]
RewriteRule  ^(.+)/(.+).htm$ index.php?path=$1/&article=$2.htm [QSA]
RewriteRule  ^(.+/)$ index.php?path=$1 [QSA]

RewriteRule  ^(.+)$ index.php?path=$1 [QSA]

This code translate urls to parameter path and article according to situation. All good and bad url request is routed to index.php except for files within folder files/.

I have problem with last line of code. It is primarily for all bad urls (all other is processed earlier). With this rule it start to loop over and over again, because all of url match this rule. This rule have to match once or never, but without [END] I cannot contrive. I have older version of apache (2.2) so I cannot use this direction.

Solution for this I have tried is something like this:

RewriteCond  %{QUERY_STRING} !^.*path=([^&]*).*$
RewriteCond %{REQUEST_URI} !^/((files|design)/.+)$
RewriteRule  ^(.+)$ index.php?path=$1 [QSA]

but cannot succeed.

Was it helpful?

Solution

Try adding a L flag to the end of each rule and add a redirect environment check in the beginning to pass through any previously internally redirected URI:

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteRule ^files/(.*)$ getfile.php?file=$1 [L]

RewriteRule  ^(.+)/index([0-9]*).html$ index.php?path=$1/&page=$2 [L,QSA]
RewriteRule  ^(.+).html$ index.php?path=$1.html [L,QSA]
RewriteRule  ^(.+)/(.+).htm$ index.php?path=$1/&article=$2.htm [L,QSA]
RewriteRule  ^(.+/)$ index.php?path=$1 [L,QSA]

RewriteRule  ^(.+)$ index.php?path=$1 [L,QSA]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top