.htaccess多语言网站

时间:2012-04-03 07:43:37

标签: apache .htaccess web multilingual

好的,基本上我有.htaccess的这部分部分工作,但还不完全。我的服务器上有两个子目录用于英语和法语站点(子目录分别是en和fr)。当用户在URL栏中输入内容时,我希望他们输入的内容被添加到en或fr(取决于用户在其计算机上的默认语言)。

如果他们输入domain.com/test(并且他们的语言设置为英语),我希望它重定向到domain.com/en/test/。我只想在测试不是根目录中的文件夹,目录,文件或ANYTHING时发生这种情况。

到目前为止,这是我的.htaccess代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^(.*)$ /en/$1/ [R=301,L]

然而,我的代码的问题是,如果用户输入类似domain.com/test/(带有斜杠)之类的东西,它将无法工作,因为我的.htaccess中有另一部分强制斜杠一切都结束了。如果用户输入domain.com/test.html(并且这是域根目录中的文件),则无法使用,因为我的.htaccess中有另一部分会删除.html扩展名。

基本上,我需要这个重定向才能在绝对所有情况下工作,除非它在逻辑上不应该。

无论如何,如果有人能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:2)

行。我就是这样做的:

无论如何都要求语言后缀/ en,/ fr等。所以将其设置为URL GET。 使用PHP,您可以强制插入它。

RewriteRule ^([a-z]{2})/?$ index.php?language=$1
RewriteRule ^([a-z]{2})/register/?$ register.php?language=$1

使用PHP或您使用的任何脚本,您可以检查IP,自动设置国家/地区GET,& /或设置会话。将会话构建到您的所有URL中,因此您的所有链接都

$url.$lang.$pagename;

使用/选择斜杠?如上例所示。

我不使用{REQUEST_FILENAME},而是拥有所有可能主网址的列表 - 但如果您愿意,也可以使用{REQUEST_FILENAME},但您需要考虑真实目录。