Lang参数重定向到子文件夹,在下一个链接上保留lang文件夹名称

时间:2014-02-11 02:41:11

标签: php apache .htaccess mod-rewrite cookies

要求是:

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 ..

注意:正如您所猜测的那样,子文件夹实际上并不存在,实际上是虚拟文件夹

2 个答案:

答案 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