【发布时间】:2019-03-21 16:36:44
【问题描述】:
我需要将任何带有查询字符串的请求从一组原始 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]
【问题讨论】:
-
不,.htaccess 不使用双引号,它只是使用未转义的空格来分隔参数。
-
您的第二组代码(RewriteRule)可以使用标志
[R=302,L,QSD]。 -
@IanCZane 你的第二条规则,只添加?在目标感谢之后,你喜欢这个感谢吗?
标签: regex .htaccess query-string