我在.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
哪个是正确的目的地,除了它应该是内部重写。我不想在浏览器位置栏中看到这一点。
我错过了什么?
答案 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/
。