views:

145

answers:

1

I want to redirect users to my home page if they enter any URL not starting with 'en' or 'fr'. I've spent hours trying to make this work but this proves too tough for my fragile newbie brain. Currently, if I try to go to

http://mysite.com/fr/produits/

Firefox tells me that the redirect will never complete.

Here's what I want:

http://mysite.com/en/whatever/ ==> rewrite as /whatever/index.php?lang=en
http://mysite.com/fr/whatever/ ==> rewrite as /whatever/index.php?lang=fr

http://mysite.com/jp/whatever/ ==> 301 redirect to /fr/accueil/ 
http://mysite.com/whatever/ ==> 301 redirect to /fr/accueil/ 

Here's my current htaccess. See inline comments for details.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Require no www
RewriteCond %{HTTP_HOST} !^mysite\.com$ [NC]
RewriteRule ^(.*)$ http://mysite.com/$1 [R=301]

# Redirect from root to /fr/accueil/, the URL for the default home page
RewriteRule ^/$ http://mysite.com/fr/accueil/ [NC,R=302]

# Rewrite language path fragment (/fr or /en) as a parameter 
RewriteRule ^fr/accueil/$ /accueil/index.php?lang=fr [QSA,NC] 
RewriteRule ^en/home/$ /accueil/index.php?lang=en [QSA,NC] 
RewriteRule ^fr/produits/$ /produits/index.php?lang=fr [QSA,NC] 
RewriteRule ^en/products/$ /produits/index.php?lang=en [QSA,NC] 

# I'm aware that the rules in this htaccess are re-examined each
# time a rewrite is issued. So the 'fr/accueil/' I'm redirecting to
# will itself be rewritten as /accueil/index.php?lang=fr. That is
# why I'm providing 3 conditions:
# If URI does not start with 'en' AND
# If URI does not start with 'fr' AND
# If QUERY_STRING is not exactly 'lang'
RewriteCond %{REQUEST_URI} !^en/.*$
RewriteCond %{REQUEST_URI} !^fr/.*$
RewriteCond %{QUERY_STRING} !^lang$
RewriteRule ^.*$ fr/accueil/ [NC,R=301]

Please put me out of my misery. Cheers!

A: 

try replacing the last line

RewriteRule ^.*$ fr/accueil/ [NC,R=301]

With

RewriteRule ^.*$ fr/accueil/ [NCL,R=301]
Otto Allmendinger
Sorry, no change (I assumed you meant [NC,L,R=301])
Terry