RewriteRule 仅当 URL 不以斜杠结尾时才会更改 URL?

RewriteRule 仅当 URL 不以斜杠结尾时才会更改 URL?

这个简单的规则用于.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-usOK (+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]

相关内容