.htaccess重定向语言请求/美化URLS

时间:2016-04-28 23:20:34

标签: php apache .htaccess url mod-rewrite

我有一个基于php的网站,我正在使用控制当前网页语言的lang网址变量。但它看起来像这样:

http://www.example.com/page?lang=en # Yes, I am using .htaccess to remove the php extension from php pages.

所以我想用.htaccess重写它:

http://www.example.com/en/page # Doesn't this look way better?

请记住,我不是也不想依赖Accept-Language,我想让用户自由更改语言,即使他们的PC是英文的,他们可能是其中一个的本地人我的网站有语言......

我尝试了以下方法:

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://www.example.com/en/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^ru [NC]
RewriteRule ^$ http://www.example.com/ru/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://www.example.com/de/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(en|ru|de)/?$ index.php?lang=$1 [QSA,NC,L]

但这显然取决于浏览器作为Header发送的内容,因此它不可行。如果我尝试更改为不在Accept-Language范围内的语言,它也会破坏我的网站 - 我的是英语,所以如果我尝试访问该网站的Deutsch版本,我会得到这个:

http://www.example.com/en/?lang=de

这当然不是我想要的。

修改

实际上,这就是我发现的:

RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [L]

我必须为我的所有页面执行此操作...问题在于,如果我尝试执行以下操作:

http://www.example.com/?lang=bg

它会保持这样,不会重定向所以我不得不更改我的所有链接 - .-有关如何重定向的任何想法?我已经有了虚拟网址。

1 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]*)/$ /?lang=$1 [L]

试试这个