仅针对 root 重定向语言 .htaccess

redirect language .htaccess only for root

我正在尝试从访问者的导航器中重定向访问者的语言,但仅限于根目录。 我用过这个代码:

<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]

它有效但不完美;我有两个问题; 第一个,url 并不是真正重写;参数 ?lang=en 没有写在 url 中;即使页面是英文的也不错。

第二个问题,如果我有一个 R=302 或 301 像这样:

    RewriteRule (.*) /?lang=en [QSA,R,L]

我有一个循环和我的网站错误 url www.mywebsite.com/?lang=en?lang=en?lang=en?lang=en?lang=en?lang=en ?lang=en?lang=en 等...

我的代码有什么问题?

此致。 保罗.

保持你的规则如下:

# 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]