这个简单的规则用于.htaccess
处理我的网站上的语言:
RewriteRule "^(de|it|es|fr|en-us)(?:|/(.*))$" "$2?lang=$1" [NC,QSA]
除非我忘记在 URL 末尾加上斜线,否则它工作正常。然后它会更改浏览器地址栏中的 URL,这不是我想要的。
为了使我更清楚,请看下面的例子。
http://mydomain/en-us/projects/
将该 URL 保存在地址栏中并调用http://mydomain/projects?lang=en-us
OK (+generates REDIRECT_STATUS=200
)。
http://mydomain/en-us/projects
(注意末尾缺少斜杠)调用相同的 URL 但在地址栏中进行了更改(它没有生成REDIRECT_STATUS
)。
由于我对 Apache 几乎没有经验,因此必须请教您如何重写以下 URL:
http://mydomain/[lang_id]
http://mydomain/[lang_id]/more/dirs/here/
http://mydomain/[lang_id]/test.php
到
http://mydomain?lang=[lang_id]
http://mydomain/more/dirs/here?lang=[lang_id]
http://mydomain/test.php?lang=[lang_id]
答案1
在规则中的尾部斜杠后添加一个问号。以 结束重写规则/?$
。请遵循以下示例:
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?shop=$1&page=index [NC,L,QSA]
对于你的情况我相信它会
RewriteRule "^(de|it|es|fr|en-us)(?:|/(.*))?$" "$2?lang=$1" [NC,QSA]