.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】:

只是一个想法,如果您有两个子目录,例如deen,您可以根据 Accept-Language 标头重写而不是重定向。但如果浏览器请求包含语言前缀的显式路径,则不会被重定向。

http://www.example.com/page1.html 将显示 /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 重写语言子域

多种语言 + Htaccess

多种语言 + Htaccess

HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它

.htaccess 问题、虚拟子域和 Codeigniter

转载 .htaccess文件RewriteRule语法规则