如何使用查询字符串从 URL 中间删除斜线?

如何使用查询字符串从 URL 中间删除斜线?

我有一些指向我服务器上某个页面的域名重定向,它们在文件名后但在查询字符串前附加了一个尾部斜杠。因此:

http://hydesim.com?dll=40.71427,-74.00597&yd=10&zm=12&op=156

…变成这样:

http://meyerweb.com/eric/tools/gmap/hydesim.html/?dll=40.71427,-74.00597&yd=10&zm=12&op=156

…而不是这样:

http://meyerweb.com/eric/tools/gmap/hydesim.html?dll=40.71427,-74.00597&yd=10&zm=12&op=156

那么,如何在保留查询字符串的同时删除 URL 中间的斜线?我尝试了一些.htaccess方法,但似乎都不起作用。最近的尝试是:

RewriteRule ^(.+)html/(.+)$ /$1html$2 [R=301,L]

[更新:该规则不起作用,因此我将其禁用,现在没有任何重写生效。]mod_rewrite您可能已经猜到了, 我对 不是很有经验。如能得到任何帮助,我将不胜感激!

答案1

Apache 的 mod_rewrite 与其 RewriteRules 中的查询字符串不匹配。如果您没有重定向到指定查询字符串的 URL,您甚至不需要 QSA。我在 Apache 2.2.22(OS X Lion 的原生版本)上本地测试了此问题,并且成功了。

RewriteRule ^(.+)html/$ /$1html [R=301,L]

编辑:如果您将 .htaccess 放在 gmap 目录中,则必须在其中使用以下内容:

RewriteEngine On
RewriteBase /eric/tools/gmap/
RewriteRule ^(.+)html/$ $1html [R=301,L]

答案2

使用 QSA(“查询字符串附加”)标志,而不是尝试自己解析它。例如:

RewriteRule ^(.+)html/(.+)$ /$1html [R=301,L,QSA]

相关内容