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

Php .htaccess重定向语言请求/美化URL,php,apache,.htaccess,url,mod-rewrite,Php,Apache,.htaccess,Url,Mod Rewrite,我有一个基于php的站点,我正在使用一个langURL变量来控制当前页面的语言。但看起来是这样的: http://www.example.com/page?lang=en # Yes, I am using .htaccess to remove the php extension from php pages. http://www.example.com/en/page # Doesn't this look way better? 所以我想用.htaccess重写它,如下所示: htt

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

http://www.example.com/page?lang=en # Yes, I am using .htaccess to remove the php extension from php pages.
http://www.example.com/en/page # Doesn't this look way better?
所以我想用.htaccess重写它,如下所示:

http://www.example.com/page?lang=en # Yes, I am using .htaccess to remove the php extension from php pages.
http://www.example.com/en/page # Doesn't this look way better?
请记住,我不是也不想依赖
接受语言
,我想给用户更改语言的自由,即使他们的电脑是英语的,他们可能是我网站上的一种语言的本地人

我尝试了以下方法:

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]
但这显然取决于浏览器作为
标题发送的内容,因此不可行。如果我尝试更改为不在
接受语言范围内的语言,它也会破坏我的网站-我的语言是英语,因此如果我尝试访问网站的德语版本,我会得到以下信息:

http://www.example.com/en/?lang=de
这当然不是我想要的

编辑:

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

RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [L]
我只需要在我所有的页面上都这么做。。。问题是,如果我尝试执行以下操作:

http://www.example.com/?lang=bg
它将保持这样,不会重定向,所以我不得不改变我的所有链接--关于如何重定向有什么想法吗?我已经有了虚拟URL

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


试试这个

那些规则甚至不能适应
q=
质量参数。第一语言不一定是首选语言无论如何,不要按照规则这样做。在PHP中探测ACCEPT_*头,相应地设置首选项cookie,或者仅在未设置时根据
?lang=
参数覆盖它们。(也请使用文字cookie,这是它们的用途,而不是会话。)这些规则甚至不能适应
q=
quality参数。第一语言不一定是首选语言无论如何,不要按照规则这样做。在PHP中探测ACCEPT_*头,相应地设置首选项cookie,或者仅在未设置时根据
?lang=
参数覆盖它们。(也请使用文字Cookie,这是它们的用途,而不是会话。)这就是你在编辑中输入的内容,并说它正在工作是的,我刚刚在我已有的规则之上添加了
RewriteCond
s,它工作了!这就是你在编辑中输入的内容,并说它正在工作是的,我刚刚在我已有的规则之上添加了
RewriteCond
s,它工作了!