.htaccess重定向不遵守我的正则表达式

时间:2019-03-21 16:36:45

标签: regex .htaccess query-string

我需要将带有查询字符串的所有请求从一组原始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]

2 个答案:

答案 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],以进行永久重定向。

注意:清除浏览器缓存,然后进行测试