要求是:
http://xxxx.com/it/
重定向到
http://xxxx.com/index.php?act=setlang&val=it
其他链接也会发生同样的情况,例如
http://xxxx.com/it/test.php
到
http://xxxx.com/test.php?act=setlang&val=it
我使用以下方法实现了这一目标:
RewriteRule ^([a-z]{2})$ index.php?act=setlang&val=$1 [L]
RewriteRule ^([a-z]{2})/([a-zA-Z0-9-]+)\.php$ $2.php?act=setlang&val=$1 [L]
问题是我希望在url路径中保持语言的连续性并在更改链接时保留它,除非lang var更改
当我访问http://xxxx.com/it
时(语言将按预期设置为意大利语),当我点击下一个链接时,例如test.php,链接将为http://xxxx.com/test.php
而不是http://xxxx.com/it/test.php
。
有没有办法使用htaccess保留它,直到用户手动更改(用户选择其他语言)
我希望保留它的原因是为了SEO目的,不确定它是否有任何区别?但我认为如果谷歌必须索引3 test.php(来自它,en.fr)它根本无法抓取各个语言?以及它是否必须抓取en / test.php fr /test.php和它/ test.php ..
注意:正如您所猜测的那样,子文件夹实际上并不存在,实际上是虚拟文件夹
答案 0 :(得分:1)
为了保持语言代码的粘性,您可以在第一次创建cookie,然后加载/it/
URL,然后为每个没有它的URI添加前缀。
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
# if lang cookie is set and URI doesn't start with 2 char lang code
RewriteCond %{HTTP_COOKIE} LANG=([^;]+) [NC]
RewriteRule ^((?![a-z]{2}/).+)$ /%1/$1 [R,L,NC]
RewriteRule ^([a-z]{2})/?$ /index.php?act=setlang&val=$1 [L,CO=LANG:$1:%{HTTP_HOST}]
RewriteRule ^([a-z]{2})/([a-zA-Z0-9-]+)\.php$ $2.php?act=setlang&val=$1 [L,CO=lang:$1:%{HTTP_HOST}]
答案 1 :(得分:0)
有没有办法使用htaccess保留它,直到用户手动更改(用户选择其他语言)
Htaccess只能通过类似HTML代理的内容来更改您网页的内容,其中您的网站的所有内容都会通过规则进行过滤,链接会神奇地改变,以便在之前包含/it/
之类的内容他们会回到浏览器。
你应该做的是在php文件中,使用val
参数的内容动态添加URI库。因此,如果请求是:
index.php?act=setlang&val=it
index.php将包含一个
<base href="/it/" />
在页面的标题中。这样,您的链接就会显示为:
http://xxxx.com/it/something.php