我在使用 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/
匹配模式中删除了前缀。)