0
RedirectMatch 301 /out/link http://www.link.com/?getparam1=something&getparam2=somethingelse&getparam3=more

当您单击 mysite.com/out/link 时,它会转到:

http://www.link.com/?getparam1=something/out/linkgetparam2=somethingelse/out/linkgetparam3=more

基本上它用 /out/link 部分替换了 http 'get' 参数的 & 符号

4

2 回答 2

1

可能尝试使用 B 标志

在应用转换之前转义非字母数字字符。

所以你会有 RedirectMatch 301 /out/link http://www.link.com/?getparam1=something&getparam2=somethingelse&getparam3=more [B]

于 2012-06-05T21:20:28.940 回答
1

以防万一您绝对想避免转义所有&符号&:如果您编写 aRewriteRule而不是RedirectMatch指令,则查询中的&符号将不会被整个匹配项($ 0)替换。

因此,接下来的两行对用户来说是相同的:(注意第二行有一个未转义的&

RedirectMatch ^/product-id/(.*) http://www.example.com/?foo=bar\&product_id=$1 
RewriteRule   ^/product-id/(.*) http://www.example.com/?foo=bar&product_id=$1 [R=301]

如果您希望用户可以看到右侧的 URI,请按照指示使用 [R] 标志。如果您省略该标志,则将向用户显示左侧的 URI(通常是更复杂的 URI,因此您可能不需要该标志)。

它将以相同的方式运行,但性能可能会降低(google RedirectMatch vs. RewriteRule)以获得更多性能。请记住,所有这些正则表达式规则都会针对您网络服务器上的每个请求进行评估。

于 2013-11-27T19:49:11.570 回答