使用.htaccess更改语言

使用.htaccess更改语言,.htaccess,mod-rewrite,query-string,multilingual,.htaccess,Mod Rewrite,Query String,Multilingual,我正在建立一个多语言网站,将在英语,德语和法语。英文站点将是根目录,其他站点将位于其子目录: 英语:example.com 德语:example.com/de 法语:example.com/fr 我很难找到干净的解决方案使用查询字符串从一种语言重定向到另一种语言。(?lang=en,?lang=de,?lang=fr) 此代码正在运行,但我认为它太长了: # Languages <IfModule mod_rewrite.c> RewriteEngine on # Deutsc

我正在建立一个多语言网站,将在英语,德语和法语。英文站点将是根目录,其他站点将位于其子目录

  • 英语:example.com
  • 德语:example.com/de
  • 法语:example.com/fr
我很难找到干净的解决方案使用查询字符串从一种语言重定向到另一种语言。(?lang=en?lang=de,?lang=fr

此代码正在运行,但我认为它太长了:

# Languages
<IfModule mod_rewrite.c>
RewriteEngine on

# Deutsch (Change FR to DE, or add DE if English)
RewriteCond %{QUERY_STRING} lang=de
RewriteRule ^fr/(.*) de/$1? [L,R=301]
RewriteCond %{QUERY_STRING} lang=de
RewriteRule ^(.*) de/$1? [L,R=301]

# English (Remove DE if German, Remove FR if French)
RewriteCond %{QUERY_STRING} lang=en
RewriteRule ^de/(.*) /$1? [L,R=301]
RewriteCond %{QUERY_STRING} lang=en
RewriteRule ^fr/(.*) /$1? [L,R=301]

# French (Change DE to FR, or add FR if English)
RewriteCond %{QUERY_STRING} lang=fr
RewriteRule ^de/(.*) fr/$1? [L,R=301]
RewriteCond %{QUERY_STRING} lang=sq
RewriteRule ^(.*) fr/$1? [L,R=301]
</IfModule>
#语言
重新启动发动机
#德语(将法语改为德语,如果是英语,则添加德语)
RewriteCond%{QUERY_STRING}lang=de
是否重写规则^fr/(*)de/$1?[L,R=301]
RewriteCond%{QUERY_STRING}lang=de
重写规则^(.*)de/$1?[L,R=301]
#英语(德语删除DE,法语删除FR)
RewriteCond%{QUERY_STRING}lang=en
是否重写规则^de/(*)/$1?[L,R=301]
RewriteCond%{QUERY_STRING}lang=en
是否重写规则^fr/(*)/$1?[L,R=301]
#法语(将DE改为FR,或在英语中添加FR)
RewriteCond%{QUERY_STRING}lang=fr
是否重写规则^de/(*)fr/$1?[L,R=301]
RewriteCond%{QUERY_STRING}lang=sq
重写规则^(.*)fr/$1?[L,R=301]
是否有更好的解决方案,因此如果我们添加更多的语言,将会有更短、更干净的代码

这是我第一次在htaccess上工作


谢谢

为什么不通过dir链接到所需的语言,而不使用查询字符串? 因此,如果您的用户想要更改语言,您可以提供一个链接,从
example.org/de/some page
example.org/fr/some page
,而不是使用
example.org/de/some page?lang=fr
,然后将他重定向到
example.org/fr/some page
。。这对我来说毫无意义

如果您希望用户以特定语言查看页面,可以通过php或其他服务器端语言重定向他

您只需要这样一个.htaccess来阻止用户查看任何没有选定语言的站点:

RewriteEngine on

# add EN if there was no language selected
RewriteCond %{REQUEST_URI} !^fr|de|en
RewriteRule ^(.*) en/$1? [L,R=301]

也许值得尝试用php来代替?只需检查lang GET并相应地更改标题。这是一个WordPress多站点,每个站点都有自己的语言,因此很难更改每个标题。我想使用htaccess会更容易,尽管我不知道如何更改语言(如果不需要插件的话)