Apache htaccess语言检测和重定向:重定向循环问题

Apache htaccess语言检测和重定向:重定向循环问题,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我并不擅长修改.htacess文件,所以我使用生成器为不同的语言创建重定向 它应该有两个选项:重定向到“ru”文件夹,如果浏览器语言是俄语,所有其他语言转到默认的英语页面。然而,我似乎并没有正确地理解它,这也会导致重定向循环 代码如下所示: RewriteEngine on RewriteCond %{HTTP:Accept-Language} (ru) [NC] RewriteRule .* %sitename%/ru/index.html [R,L] 若用户使用选择器手动更改语言,那个么重

我并不擅长修改.htacess文件,所以我使用生成器为不同的语言创建重定向

它应该有两个选项:重定向到“ru”文件夹,如果浏览器语言是俄语,所有其他语言转到默认的英语页面。然而,我似乎并没有正确地理解它,这也会导致重定向循环

代码如下所示:

RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (ru) [NC]
RewriteRule .* %sitename%/ru/index.html [R,L]

若用户使用选择器手动更改语言,那个么重定向也将被禁用。提前感谢。

如果您已经在
/ru/
文件夹中,浏览器的accept语言将仍然相同,这意味着您的条件仍然为真,这意味着即使您已经在那里,它也会将您重定向回ru文件夹

您需要检查您是否已在
/ru/
文件夹中:

RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (ru) [NC]
RewriteRule ^(?!ru/) %sitename%/ru/index.html [R,L]
如果语言是其他语言,则重定向出ru文件夹:

RewriteCond %{HTTP:Accept-Language} !(ru) [NC]
RewriteRule ^ru/ %sitename%/index.html [R,L]

确保这些规则是您的首要规则:

RewriteEngine on

RewriteCond %{HTTP:Accept-Language} ru [NC]
RewriteRule !^ru(/.*)?$ /ru/index.html [R,L,NC]

RewriteCond %{HTTP:Accept-Language} !ru [NC]
RewriteRule ^ru(/.*)?$ /index.html [R,L,NC]

唉,还是同样的重定向循环:(我还尝试使用这样的代码:RewriteCond%{HTTP:Accept Language}^ru[NC]RewriteRule^$%sitename%/ru/[L,R=301]RewriteCond%{HTTP:Accept Language}^en[NC]RewriteRule^$%sitename%[L,R=301]RewriteRule^$%sitename%[L,R=301]它不会导致任何循环问题,但也不能像预期的那样工作。