Apache 为什么这个mod_rewrite表达式不能正确附加现有的查询字符串?

Apache 为什么这个mod_rewrite表达式不能正确附加现有的查询字符串?,apache,mod-rewrite,parameters,Apache,Mod Rewrite,Parameters,我是一个关于修改的新手,所以请不要笑。我正在使用此工具进行测试: 基本上我想重写 http://hostname/spanish/whatever/ 进入 以下是我能想到的最好的: RewriteRule ^spanish/(.*)$ $1?lang=es [QSA,L,NC] 除了请求的页面已经有参数时,它似乎工作正常。那么 http://hostname/spanish/gallery/photos/?page=2 被重写为 http://hostname/spanish/galler

我是一个关于修改的新手,所以请不要笑。我正在使用此工具进行测试:

基本上我想重写

http://hostname/spanish/whatever/
进入

以下是我能想到的最好的:

RewriteRule ^spanish/(.*)$ $1?lang=es [QSA,L,NC]
除了请求的页面已经有参数时,它似乎工作正常。那么

http://hostname/spanish/gallery/photos/?page=2
被重写为

http://hostname/spanish/gallery/photos/?page=2?lang=es

谁能帮助这个困惑的新手?非常感谢。

像这样的东西应该会有帮助

# Remove query strings from URL
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://yourdomain.com%{REQUEST_URI}? [R=301,L]

基本上,该工具是误导性的,因为当在真实的服务器环境中使用时,该规则被证明是正确的。多亏了大家。

虽然工具给出了这样的结果,但实际的web服务器给出了什么?Ignacio提出了一个很好的观点。我怀疑如果你在Apache中尝试这个工具,它实际上会做你想做的事情。我也使用过这个工具,它非常有用,但它不是100%完美的。Apache文档声明您的规则应该有效。非常感谢各位!看来这个工具误导了我——我现在对自己感觉好多了!我在我的机器上测试了它,效果很好。干杯
# Remove query strings from URL
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://yourdomain.com%{REQUEST_URI}? [R=301,L]