Apache .htaccess多语言网站

Apache .htaccess多语言网站,apache,.htaccess,web,multilingual,Apache,.htaccess,Web,Multilingual,好的,所以基本上我有.htaccess的这一部分在工作,但还没有完全工作。我的服务器上有两个子目录,分别是英语和法语站点(子目录分别是en和fr)。当用户在URL栏中输入内容时,我希望他们键入的任何内容都添加到en或fr中(取决于用户计算机上的默认语言) 如果他们输入domain.com/test(并且他们的语言设置为英语),我希望它重定向到domain.com/en/test/。我只希望在测试不是文件夹、目录、文件或根目录中的任何内容时发生这种情况 以下是我的.htaccess代码,到目前为止

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

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

以下是我的.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扩展名

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


无论如何,如果你们中有人能帮我的话,我将非常感激。

好的。我就是这样做的:

无论发生什么情况,始终需要语言后缀/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中,以便所有链接都具有

$url.$lang.$pagename;
使用/?如上面的例子所示


我不使用{REQUEST\u FILENAME},而是我有一个所有可能的主URL的列表-但是如果你愿意,你也可以使用{REQUEST\u FILENAME},但是你需要考虑真实的目录。

我根本不想使用PHP,我只对使用.htaccess文件感兴趣。就像我在OP里说的,我让它部分起作用了。如果输入的URL末尾没有斜杠,则会添加/en/。但它也会在我不希望的情况下重写URL。。。例如:如果文件已经在根文件夹中。我的原始代码也有另一个问题。当我实际在en/子域中时,它也会在URL上添加另一个en/子域。因此,如果我在domain.com/en/test上,然后单击示例,它将转到domain.com/en/en/example。