我已经使用php gettext在我的网站上成功设置了本地化,并且当访问者选择他们的首选语言时设置浏览器cookie。
虽然页面以正确的语言显示,但我希望URL通过在URL前面加上语言代码(而不是区域代码)来反映当前选择的语言。
这就是我的htaccess文件目前的样子:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^en(/?$|/(.*)) $1?locale=en_GB [QSA,DPI,L]
RewriteRule ^fr(/?$|/(.*)) $1?locale=fr_FR [QSA,DPI,L]
RewriteRule ^de(/?$|/(.*)) $1?locale=de_DE [QSA,DPI,L]
RewriteRule ^es(/?$|/(.*)) $1?locale=es_ES [QSA,DPI,L]
RewriteRule ^ru(/?$|/(.*)) $1?locale=ru_RU [QSA,DPI,L]
假设访问者点击主页上的法语链接,显示给访问者的网址为mysite.com/fr
,语言更改为法语。
如果他们点击了page1.php
的链接,则网址更改为mysite.com/page1.php
,并显示法语版的第1页。
我希望该网址显示为mysite.com/fr/page1.php
。
我尝试将以下行添加到htaccess,就在RewriteCond行的下方,但我显然做错了:
RewriteCond %{HTTP_COOKIE} locale=([a-z]{2}\_[A-Z]{2}) [NC]
RewriteRule ^(.*)$ /%1/$1 [NC,L,QSA]
请注意,在上面的行中,我尝试使用整个区域设置代码(例如fr_FR
)为URL添加前缀,而最终我想要的是在URL前面加上区域设置代码的前两个字符(例如fr
)。
提前谢谢。
答案 0 :(得分:0)
我认为你不应该使用.htaccess重写...
http://mysite.com/page1.php你应该知道你要向他展示的语言并将其重定向到例如:http://mysite.com/en/page1.php - 例如,通过查看浏览器语言接受值。
http://mysite.com/en/page1.php那么你不需要做任何事情,你知道使用哪种语言。
我强烈建议您不要使用cookies。许多网站都使用cookie完全没有任何目的,所有他们所做的就是以您选择的任何语言将您发送到页面。如果您默认不接受cookie(每个人都应该这样做),那就完全激怒了。
请注意,所有您网站上的链接将始终将语言作为其网址的一部分,因为如果他们不这样做,您就会回到原因1,您的用户可能会切换回默认语言。在这里使用cookie只会使事情变得复杂,如果你真的想在使用英文网站后转换到法国网站怎么办?
我想底线是:不要将Cookie与您的网址结合使用以识别资源,因为Cookie不明显,所以您所指的资源变得非常模糊。唯一的例外当然是你在做一些身份验证之类的东西,如用户帐户和诸如此类的东西,但是缺少一个cookie应该总是导致'请登录',而不是看起来像你想要的东西,但不是'吨。