Я перепроектирую URL-адрес многоязычного сайта PHP (en | es | de | fr | ru). URL-адрес сайта:
www.mysite.com/page www.mysite.com/page/subpage1 www.mysite.com/page/subpage1/subpage2 www.mysite.com/page/subpage1/subpage2/subpage3
До четырех уровней подкаталогов (продукты, субпродукты и т. Д.). Язык передается как параметр GET:
www.mysite.com/page?lang=es
или
www.mysite.com/page/subpage1/subpage2?lang=de
Текущий .htaccess выглядит примерно так:
Options +FollowSymlinks +MultiViews -Indexes RewriteEngine on RewriteBase / # Redirect all versions of homepage to www.mysite.com RewriteCond %{REQUEST_URI} ^/index\.html$ RewriteRule ^index.html$ http://www.mysite.com/ [R=301,L] # Redirect non-www to www traffic RewriteCond %{HTTP_HOST} !^(www\.mysite\.com)?$ RewriteRule (.*) http://www.mysite.com/$1 [R=301,L] RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f #Remove php extension RewriteCond %{REQUEST_URI} ^(.*).php$ RewriteRule ^(.*)$ %1 [R=301,QSA] #Here I have a lot of 301 redirections, I ommit them for this example # First level redirections RewriteRule ^([0-9a-zA-Z\-\_]+)$ view?page=$1 [L,QSA] # Second level redirections #RewriteRule ^(page1|page2|page3)\/([0-9a-zA-Z\-\+\_\,\.\(\)]+)$ view?page=$1&subpage1=$2 [L,QSA] # Third level redirections RewriteRule ^([0-9a-zA-Z\-\_]+)\/([0-9a-zA-Z\-\+\_\,\.\(\)]+)\/([0-9a-zA-Z\-\_]+)$ view?page=$1&subpage1=$2&subpage2=$3 [L,QSA] # Fourth level redirections RewriteRule ^([0-9a-zA-Z\-\_]+)\/([0-9a-zA-Z\-]+)\/([0-9a-zA-Z\-]+)\/([0-9a-zA-Z\-]+)$ view?page=$1&subpage1=$2&subpage2=$3&subpage3=$4 [L,QSA]
Теперь я хочу перенаправить весь сайт на URL с дополнительным языковым подкаталогом, если в URL-адресе (GET) нет параметра языка (например, английский язык по умолчанию):
www.mysite.com/page -> www.mysite.com/en/page www.mysite.com/page/subpage1 -> www.mysite.com/en/page/subpage1
и если параметр GET передан в URL-адресе, я хочу перенаправить на правильный URL-адрес:
www.mysite.com/page?lang=es -> www.mysite.com/es/page www.mysite.com/page/subpage1?lang=es -> www.mysite.com/es/page/subpage1
Я рассмотрел другие подобные вопросы, но все они основаны на 301 переадресации с последним параметром ([R = 301, L]), и я боюсь, что Last недействителен для меня.
У меня есть несколько вопросов:
заранее спасибо
Вам нужны следующие дополнительные правила:
# lang supplied in query string RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{QUERY_STRING} ^lang=([az]{2})(?:&|$) [NC] RewriteRule !^[az]{2}/ /%1/%{REQUEST_URI}? [L,NC,R=301] # lang not supplied in query string RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{QUERY_STRING} !^lang=.+(&|$) [NC] RewriteRule !^en/ /en/%{REQUEST_URI} [L,NC,R=301]
Вы можете перенаправить весь свой сайт на английский как свой по умолчанию или в правильную локализованную версию своего сайта, выполнив что-то вроде этого:
RewriteRule ^(en|es|de)/(.*)$ $2?lang=$1 [L,QSA] RewriteRule ^(.*)$ $1?lang=en [L,QSA]