mod_rewrite 重写损坏的 URL 和错误的查询字符串

mod_rewrite 重写损坏的 URL 和错误的查询字符串

我在使用 mod_rewrite 时遇到了麻烦。我的网站上有一个损坏的外部链接,如下所示:

http://www.example.com/foo/page?myparam=AB/some-garbage.asp?bar=123

我正在尝试创建一个 mod_rewrite 规则来修复它(删除最后一个斜杠及其后的所有内容)。我尝试了各种方法,例如:

RewriteCond %{QUERY_STRING} myparam=AB/ [NC]
RewriteRule (myparam=AB.*) myparam=AB [L,R]

我将这条规则放在规则列表的顶部,但收到“禁止访问此服务器上的 /foo/page”错误。如果我从 URL 中删除最后一个“?”以及其后的所有内容,则此 URL 的处理程序将有一个 myparam 参数,其值为“AB/some-garbage.asp”。

我也尝试了 REQUEST_URI 和 THE_REQUEST,但似乎没有什么可以重写此 URL。请帮忙?

答案1

尝试这样的操作:

RewriteCond %{QUERY_STRING} ^(myparam=AB)/ [NC]
RewriteRule ^(/foo/page)$ $1?%1 [L]

()如果您需要匹配更多种类的查询字符串和 URI,括号内的部分可以是更通用的正则表达式。

编辑

上面RewriteRule假设它不是在.htaccess文件中使用,而是在 apache 服务器.conf文件(例如httpd.conf)中使用。

如果您的重写规则位于.htaccess文件中,则需要从RewriteRule匹配模式中省略 URI 的前导目录部分。例如,如果您的.htaccess文件位于foo服务器上的目录中,那么您的RewriteRule重写规则应如下所示:

RewriteRule ^(page)$ $1?%1 [L]

(请注意,此命令与上面的命令相同,但是从/foo/匹配模式中删除了前缀。)

相关内容