我正在尝试将访问者的语言从导航器重定向,但只能从根目录重定向。 我使用过这段代码:
<IfModule mod_rewrite.c>
# Force the "www." at the beginning of URLs #-----------------
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Language redirection #----------
# French
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule (.*) /?lang=fr [QSA,L]
# English
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule (.*) /?lang=en [QSA,L]
它有效但不完美;我有2个问题; 第一个,网址并没有真正改写; param?lang = en不写入url;即使页面是英文中的好页面。
第二个问题是,如果我有一个R = 302或301 像这样:
RewriteRule (.*) /?lang=en [QSA,R,L]
我在这个网址上有一个循环和我的网站错误www.mywebsite.com/?lang=en?lang=en?lang=en?lang=en?lang=en?lang=en?lang=en?lang = en等...
我的代码中有什么问题?
此致。 保罗。
答案 0 :(得分:1)
保持这样的规则:
# Force the "www." at the beginning of URLs #-----------------
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# make english default lang
RewriteCond %{HTTP:Accept-Language} !^(en|fr) [NC]
RewriteCond %{QUERY_STRING} !(?:^|&)lang=(?:en|fr) [NC]
RewriteRule ^/?$ /?lang=en [QSA,L,R]
# Language redirection #----------
RewriteCond %{HTTP:Accept-Language} ^(en|fr) [NC]
RewriteCond %{QUERY_STRING} !(?:^|&)lang=(?:en|fr) [NC]
RewriteRule ^/?$ /?lang=%1 [QSA,L,R]