我遇到了mod_rewrite问题。 有一个外部链接到我的网站,看起来像这样:
http://www.example.com/foo/page?myparam=AB/some-garbage.asp?bar=123
我试图创build一个mod_rewrite规则来解决它(删除最后的斜线和它后面的一切)。 我已经尝试了各种各样的东西:
RewriteCond %{QUERY_STRING} myparam=AB/ [NC] RewriteRule (myparam=AB.*) myparam=AB [L,R]
我在规则列表的顶部有这个规则,但是我得到一个“禁止访问这个服务器上的/ foo /页”的错误。 如果我删除了最后一个“?” 以及之后的所有内容,那么这个URL的处理程序的参数是myparam,其值为“AB / some-garbage.asp”。
我也尝试了REQUEST_URI和THE_REQUEST,但似乎没有重写这个URL。 请帮助?
尝试这样的事情:
RewriteCond %{QUERY_STRING} ^(myparam=AB)/ [NC] RewriteRule ^(/foo/page)$ $1?%1 [L]
圆括号()的部分可以是更一般的正则expression式,如果需要匹配更广泛的查询string和URI。
编辑
上面的RewriteRule假定它没有在.htaccess文件中使用,而是在apache服务器的.conf文件(如httpd.conf )中使用。
如果您的重写规则在.htaccess文件中,则需要从RewriteRule的匹配模式中省略URI的主目录部分。 例如,如果您的.htaccess文件位于服务器上的foo目录中,那么您的RewriteRule应该如下所示:
RewriteRule ^(page)$ $1?%1 [L]
(注意这个命令与上面的命令是一样的,但是从匹配模式中删除了/foo/前缀。)