用于重写语言以查询字符串的Mod_rewrite规则

时间:2015-03-24 02:12:34

标签: .htaccess mod-rewrite

我在.htaccess中使用以下内容将url中指定的语言转换为查询字符串:

RewriteEngine On
RewriteBase /
RewriteRule ^(en|fr)/(.*)$  $2?language=$1 [L,QSA]

当我输入任何一个时,它按预期工作:

mydomain.com/en/
mydomain.com/en/about/
mydomain.com/en/about/index.php

但如果我输入:

mydomain.com/en/about

(没有斜杠),浏览器重定向到

mydomain.com/en/about/?language=en

哪个是正确的目的地,除了它应该是内部重写。我不想在浏览器位置栏中看到这一点。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您需要关闭mod_dir并在内部处理尾部斜杠。也许是这样的:

DirectorySlash Off
RewriteEngine On
RewriteBase /

# handle post-rewrite trailing slashes
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/ [L,R]

# handle pre-rewrite trailing slashes
RewriteCond %{DOCUMENT_ROOT}/$2 -d
RewriteRule ^(en|fr)/(.*[^/])$ /$1/$2/ [L,R]

RewriteRule ^(en|fr)/(.*)$  $2?language=$1 [L,QSA]

这应该接受mydomain.com/en/about之类的请求,并在最后一条规则内部重写之前将其重定向到mydomain.com/en/about/

相关问题