我需要将带有查询字符串的所有请求从一组原始URL重定向回谢谢页面。
例如,我需要重定向:
http://example.com/test1/test2/[origin]/?id=1
回到
http://example.com/thank-you
在我的.htaccess文件中进行设置的方式如下:
RewriteEngine On
RedirectMatch 302 ^/test1/test2/(.*)/.+ /thank-you
我已经在在线正则表达式测试器中测试了我正在使用的正则表达式,它似乎可以正常工作,所以我对为什么不进行重定向感到困惑。 Here's the link to that.
很显然,我不得不在正则表达式测试器中添加反斜杠来转义URL中的斜杠,但是基于我对.htaccess如何评估正则表达式的理解,这些不是必需的。
我的问题是:如果我从正则表达式字符串的末尾删除.+
,则重定向可以在没有查询字符串的情况下从页面完美地工作,这意味着正则表达式的开始部分可以正常工作。我不明白为什么查询字符串与我创建的正则表达式不匹配。
我也尝试过:
RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule (.*) /thank-you [R=302,L]
答案 0 :(得分:0)
对于RedirectMatch,您可以使用:
RedirectMatch 302 ^/test1/test2/(.*)/(.*)+ /thank-you?
对于RewriteRule部分,您可以使用:
RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule (.*) /thank-you [R=302,L,QSD]
答案 1 :(得分:0)
首先,不需要RewriteEngine On
的{{1}}(您的规则是mod_alias
)与第二条规则RedirectMatch
一起使用。
尝试一下:
mod_rewrite
我使用RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^test1/test2/[^\/]+/$ /thank-you? [R=302,L]
来限制以^id=([0-9]+)$
开始并以id
结尾的查询字符串。
由于您也可以与numerical value
中的URI相匹配,因此我删除了RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/
这行。
如果此规则无效,请将RewriteRule
更改为[R=302,L]
,以进行永久重定向。
注意:清除浏览器缓存,然后进行测试