RewriteRule捕获正则表达式的第二个实例

时间:2014-01-30 21:35:47

标签: regex apache .htaccess mod-rewrite

我正在尝试阻止盲目重定向到不属于我网站的域名。我正在引用一个包含已批准域列表的重写映射。除了以下场景外,这已按预期工作。我的正则表达式是捕获从第一个targetPage =一直到第二个.com的字符串,我需要它停在第一个.com所以我可以捕获域。

规则:

RewriteCond %{QUERY_STRING} ^(.*[&?]|)(url=|target=|targeturl=|targetpage=|redirecturl=)(https?)[\%A-Z0-9]*2F(.*\.com|.*\.net|.*\.org)/?.*$ [NC]
RewriteCond ${validDomains:%4} !validdomain

当击中网址时: https://mysite.domain.com/secure/SigninServlet?targetPage=https://mysite.domain.com/mysite/pages/msb/myAccount/correct.jsp?RNRedirectUrl=DSP&referrerUrl=https://mysite.domain.com/mysite/pages/msb/user/signinrn.jsp

返回的%4参考值为: mysite.domain.com/mysite/pages/msb/myAccount/correct.jsp?RNRedirectUrl=DSP&referrerUrl=https://mysite.domain.com

如果我将referrerUrl更改为以.cim结尾,那么我只捕获mysite.domain.com

如何修改正则表达式只能看到第一个域而不是第二个?

1 个答案:

答案 0 :(得分:1)

尝试此规则:

RewriteCond %{QUERY_STRING} (^|&)(url|target|targeturl|targetpage|redirecturl)=(https?)[\%A-Z0-9]*2F([^&]*?\.(?:com|net|org)) [NC]
RewriteCond ${validDomains:%4} !validdomain