.htaccess 重写/接受语言
Posted
技术标签:
【中文标题】.htaccess 重写/接受语言【英文标题】:.htaccess rewrite / accept language 【发布时间】:2016-11-04 14:50:03 【问题描述】:以下问题: 我在子文件夹中有 2 个 html 网站,一个是英文网站,一个是德文网站。我使用 .htaccess 重写规则根据用户的语言重定向到正确的站点:
RewriteCond %HTTP:Accept-Language ^de [NC]
RewriteRule ^$ http://example.com/ [L,R=301]
这是英文版子文件夹.htaccess 中的代码。 当德国用户想要查看页面的英文版时,就会出现此问题,他总是会被重定向到德语版。
有什么方法可以在用户第一次访问时重定向,但是当他点击德文页面上的超链接English
时,他会看到英文版本,而不会再次被重定向到德文网站?
mod-rewrite 可用,但我需要一个条件来仅重定向一次(第一次访问时),并且当用户单击特定超链接时,他不会再次被重定向?
【问题讨论】:
那么您必须为此创建代码,而不是在 .htaccess 文件中定义。 什么类型的代码? 【参考方案1】:只是一个想法,如果您有两个子目录,例如de
和 en
,您可以根据 Accept-Language
标头重写而不是重定向。但如果浏览器请求包含语言前缀的显式路径,则不会被重定向。
/en/page1.html
或 /de/page1.html
取决于 Accept-Language
http://www.example.com/en/page1.html 将始终显示 /en/page1.html
无论 Accept-Language
说什么
您可以尝试这些(未经测试!)规则
RewriteRule ^en/ - [L]
RewriteRule ^de/ - [L]
RewriteCond %HTTP:Accept-Language ^de [NC]
RewriteRule ^ /de%REQUEST_URI [L]
RewriteCond %HTTP:Accept-Language ^en [NC]
RewriteRule ^ /en%REQUEST_URI [L]
另一种方法是设置一个 cookie,当用户决定一种语言时,并根据这个 cookie 传递页面。
【讨论】:
以上是关于.htaccess 重写/接受语言的主要内容,如果未能解决你的问题,请参考以下文章
HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它