HyderA
HyderA

Reputation: 21401

.htaccess redirect loop issue

If I go to domain.com, site redirects to domain.com/en, which is expected. But then the last rule kicks in and throws it in a loop making my url look something like this:

http://domain.com/en/?lang=en&request=&site=basecamp&lang=en&request=&site=basecamp&lang=en&request=&site=basecamp&lang=en&request=&site=basecamp

.htaccess file

Options +FollowSymlinks
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/
RewriteRule  /([^.]+\.(jpe?g|gif|bmp|png|css|js|eot|svg|ttf|ico|pdf))$ /$1 [NC,R,L]

RewriteCond %{REQUEST_URI} !(content|images|css|js|fonts|pdfs)/.*
RewriteRule !^[a-z]{2}/ /en/ [NC,L,R]

RewriteCond %{REQUEST_URI} !/(init\.php|content|images|css|js|fonts|pdfs)/
RewriteRule ^([a-z]{2})/(.*)$ init.php?lang=$1&request=$2&site=basecamp[L,QSA]

Why is the htaccess file redirecting to /?GET_VARS instead of /init.php?GET_VARS ?

And how can I avoid this loop?

Upvotes: 0

Views: 688

Answers (1)

Jon Lin
Jon Lin

Reputation: 143946

Try changing your last condition by removing the leading and trailing slashes. You've rewritten your URI to:

/init.php

But there's no trailing slash like there is in the condition that you've provided, so the rule gets applied again. It should look like:

RewriteCond %{REQUEST_URI} !(init\.php|content|images|css|js|fonts|pdfs)

Not sure why you insist on having the trailing slash at the end of your condition here:

#                 with this / here, it will never match init.php --------v
RewriteCond %{REQUEST_URI} !/(init\.php|content|images|css|js|fonts|pdfs)/

But you can solve it by just excluding init.php directly:

RewriteCond %{REQUEST_URI} !init.php

So, just so it's clear, your last set of conditions/rule will look like:

RewriteCond %{REQUEST_URI} !init.php
RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/
RewriteRule ^([a-z]{2})/(.*)$ init.php?lang=$1&request=$2&site=basecamp [L,QSA]

Or worst case, just add this in the very beginning of your rules:

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

Which prevents any kind of rewrite engine looping altogether.

Upvotes: 1

Related Questions