2012-04-03 178 views
2

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

如果他们输入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/进入(WITH斜线),它将无法正常工作,因为我的.htaccess中有另一部分强制在所有内容的末尾加上斜线。如果用户输入domain.com/test.html(并且该域是根目录中的文件),它将不起作用,因为我的.htaccess中的另一部分删除了.html扩展名。

基本上,我需要这个重定向工作在绝对所有的情况下,除了逻辑上不应该的地方。

无论如何,如果你们中的任何人都可以帮助我,我会非常感激。

回答

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,设置国家自动获取,& /或设置会话。建立会话到您的所有网址,让所有的链接都

$url.$lang.$pagename; 

设为可选与/斜杠?如上面的例子。

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

+0

我不想使用PHP,我只对使用.htaccess文件感兴趣。就像我在OP中所说的那样,我有一部分工作。如果输入的URL末尾没有斜线,则会添加/ en /。但它也会在某些情况下重写URL,例如:如果该文件已位于根文件夹中。 – shootingrubber 2012-04-03 08:03:24

+0

我的原始代码也存在另一个问题。当我真的在en/subdomain中时,它会在URL中添加另一个en /。所以如果我在domain.com/en/test上,然后点击该示例,它将转到domain.com/en/en/example。 – shootingrubber 2012-04-03 08:10:29

+0

谢谢,它帮助我。 – Elkas 2012-12-20 17:11:49