我需要对.htaccess文件进行一些小改动,与路径和重定向有关。 我将在网站上使用不同的语言,例如:
domain.com/fr - 法语网站 domain.com/ru - 俄罗斯网站
和网站上的网页,例如: domain.com/fr/contact domain.com/ru/contact
服务器上没有直接的子服务,例如" fr"或者" ru"而是我想要定义.htaccess文件中支持的所有语言,这样如果用户在浏览器中访问如下页面:
" domain.com/fr/contact"
然后.htaccess规则将指向脚本:
domain.com/translate.pl?fr/contact
translate.pl将显示正确的语言/页面,但仍显示在浏览器原始页面" domain.com/fr/contact"。
如果用户正在浏览器中访问,例如:domain.com/fr/contact并点击其他页面,例如" domain.com/faq" ;,则htaccess将保留相同的语言。如果用户在" ru"网站,然后它会显示" domain.com/ru/faq"如果用户点击链接" domain.com/faq"。
答案 0 :(得分:0)
对于第一部分,您要使用内部重写。对于第二部分,您需要使用外部重定向。要使第二部分起作用,您可能想要使用cookie:
第一部分很简单。如果url已经包含一种语言,我们会在内部将其重写为translate.pl。除此之外,我们使用当前语言设置cookie。有关CO标志的更多信息,请参阅the documentation。如果您可以使用查询字符串调用原始URL,则可能需要使用QSA标志。
#Internal redirect
RewriteRule ^(fr|ru)/(.*)$ /translate.pl?$1/$2 [L,CO=lang:$1:127.0.0.1:1000:/:0:1]
第二部分可能有点棘手。如果设置了cookie,则需要重定向用户,但如果未设置cookie,则还需要重定向。如果网址尚未包含语言标识符,我们只需要重定向。
#Redirect if we know the previous language
RewriteCond %{THE_REQUEST} !^(GET|POST)\ /(ru|fr)/
RewriteCond %{HTTP_COOKIE} lang=(ru|fr)
RewriteRule ^(.*)$ /%1/$1 [R,L]
#Redirect if we don't know the previous language
RewriteCond %{THE_REQUEST} !^(GET|POST)\ /(ru|fr)/
RewriteCond %{HTTP_COOKIE} !lang=(ru|fr)
RewriteRule ^(.*)$ /ru/$1 [R,L]
此代码未经测试,但理论上应该有效。您显然需要更改cookie的域名。您还应该确保某种语言的页面上的所有链接都包含该语言标识符,只是为了使您的网站更具搜索引擎和用户友好性。将以上示例中的R
标记更改为R=301
,如果且仅当所有内容都按预期工作时。