htaccess redirect subdomain to directory

Cécile Habran

I need help to write proper rewrite rules in my htaccess files.

I need to redirect something like fr.example.com to example.com/fr, because we recently changed the whole website and the multilingual system is managed differently. The structure and the pages too.

I managed to do that successfully with this piece of code:

RewriteCond %{HTTP_HOST} ^fr\.example\.com [NC]
RewriteRule (.*) http://example.com/fr/$1 [L,R=301]

My problem now is to write something more specific for pages, for example :

fr.example.com/discover/foo should go to example.com/fr/bar/foo (different path, nothing consistant)

BUT ! example.com/discover/foo should go to example.com/bar/foo (end of the url is the same in both english and french)

Right now, since I have some common 301 redirects, the french urls aren't redirect properly and lead to the english pages. For example that one :

Redirect 301 /discover/foo /bar/otherfoo

Successfully redirects example.com/discover/foo to example.com/bar/otherfoo but also redirects fr.example.com/discover/otherfoo

How can I write two different rules for english and french? I'll have to write a bunch of different rules since everything is very different from the old subdomain to the new directory, I don't mind.

Thanks !

EDIT

Please note that it's for a wordpress installation, and the htaccess starts with :

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Mohammed Elhag

First the these rules:

RewriteCond %{HTTP_HOST} ^fr\.example\.com [NC]
RewriteRule (.*) http://example.com/fr/$1 [L,R=301]

should look like this :

RewriteCond %{HTTP_HOST} ^(www\.)?fr\.example\.com [NC]
RewriteRule (.*) http://example.com/fr/$1 [L,R=301]

In order to capture bot www & non-www requests for subdomain.

Also this rule :

Redirect 301 /discover/foo /bar/foo

Will capture both requests to domain and sub-domains and using mod_rewrite here is correct not mod_alias so , replace this line with :

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^discover/foo http://example.com/bar/foo [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?(fr)\.example\.com [NC]
RewriteRule ^discover/foo http://example.com/%2/bar/foo [L,R=301]

Note: clear browser cache then test.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related