我正在尝试阻止盲目重定向到不属于我网站的域名。我正在引用一个包含已批准域列表的重写映射。除了以下场景外,这已按预期工作。我的正则表达式是捕获从第一个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
如何修改正则表达式只能看到第一个域而不是第二个?
答案 0 :(得分:1)
尝试此规则:
RewriteCond %{QUERY_STRING} (^|&)(url|target|targeturl|targetpage|redirecturl)=(https?)[\%A-Z0-9]*2F([^&]*?\.(?:com|net|org)) [NC]
RewriteCond ${validDomains:%4} !validdomain