如果未选择任何语言,则重定向到默认语言目录-.htaccess
基本上,我在.htaccess中有几行代码可以检测所选的假*子文件夹语言,并自动重定向到?lang=(所选语言) 因此,任何URL都像这样,例如:如果未选择任何语言,则重定向到默认语言目录-.htaccess,.htaccess,.htaccess,基本上,我在.htaccess中有几行代码可以检测所选的假*子文件夹语言,并自动重定向到?lang=(所选语言) 因此,任何URL都像这样,例如:localhost/bb/fr/ url中是否会存在后台的localhost/bb/index.php?lang=French,但同时保留请求的假*子文件夹 它工作得很完美,但仍然需要做的是: 如果未选择任何语言且用户位于url:localhost/bb/或localhost/bb/index.php则默认情况下应将其重定向到英语(localhost/
localhost/bb/fr/
url中是否会存在后台的localhost/bb/index.php?lang=French
,但同时保留请求的假*子文件夹
它工作得很完美,但仍然需要做的是:
如果未选择任何语言且用户位于url:localhost/bb/
或localhost/bb/index.php
则默认情况下应将其重定向到英语(localhost/bb/en
),因为他没有选择任何语言
我尝试的是:
RewriteCond !^(fr|en|ar)/?(.*)?$ !-d
RewriteRule !^(fr|en|ar)/?(.*)?$ ./en/$1 [L,R]
但这会导致一个奇怪的无限循环,看起来像:
localhost/bb/en/en/en/en/en/en/en/en/en/en/?lang=English?lang=English?lang=English?lang=English?lang=English?lang=English?lang=English
如果我这样做,结果也是一样的:
RewriteRule ^(?!(?:en|ar|fr)/)(.*)$ en/$1 [R=301,L]
如果我使用类似于:
RewriteCond %{REQUEST_URI} !^/((en|ar|fr)/.*)$
RewriteRule .* ./en/%1 [L,R=301]
这是社区中其他Q答案的建议
它会引发如下错误:
localhost重定向您的次数太多。
任何带有示例的建议或解决方案都将不胜感激
RewriteCond^(fr|en|ar)/?(.*)-d
一开始就完全错了。您正在检查此正则表达式的文本是否与现有目录不匹配。我假设您没有一个名为^(fr | en | ar)/?(.*)$
-所以这个条件总是正确的,但它绝对不是您认为应该的。是的,我没有那些目录fr/en/ar/等等,如果他们从url调用,我会将thme重定向到背景中的lang?=*但url会保留该假子文件夹,如localhost/bb/fr/index.php
。。。等等,我是否应该删除RewriteCond,因为它没有做任何有用的事情?如果没有选择lang,我应该如何强制使用默认langlocalhost/bb/en/
?因此,您在内部重定向到的$1
部分始终与物理上存在的部分匹配?因为如果它没有(并且您进行了额外的重写,最终将其转换为一些路由参数),那么您将很难确定语言前缀何时丢失。如果它始终存在,则放弃当前的重写条件(这只会影响紧跟其后的规则顺便说一句,因此这不会影响您的第二条和第三条规则。)[…][…]然后在三条现有规则之后添加一个条件,检查请求的URI是否与物理上存在的任何内容不匹配(如果你不知道怎么做,请研究一下),在这种情况下,一条规则将重定向到en/
前缀路径。@CBroe,是的$1
将始终保留url中实际存在的请求,例如localhost/bb/en/?article=1&comment=1
RewriteCond %{REQUEST_URI} !^/((en|ar|fr)/.*)$
RewriteRule .* ./en/%1 [L,R=301]