重写捕获第二个regex实例的规则

重写捕获第二个regex实例的规则,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我试图阻止盲目重定向到不属于我的网站的域名。我正在引用一个包含已批准域列表的rewritemap。除以下场景外,此功能一直按预期工作。我的正则表达式正在捕获从第一个targetPage=一直到第二个.com的字符串,我需要它在第一个.com处停止,以便捕获域 规则: 当命中的url为: https://mysite.domain.com/secure/SigninServlet?targetPage=https://mysite.domain.com/mysite/pages/msb/myAcc

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

规则:

当命中的url为:
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&refererURL=https://mysite.domain.com

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

如何修改正则表达式以只查看第一个域而不查看第二个域?

尝试以下规则:

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

为什么不使用
[a-z0-9.]
作为域名捕获?为什么你想要一个域名中的
%
,它会编码什么?当更新到该域名时,它与重写条件不匹配,因为目标页面没有编码-你的([^&]*?\(?:com | net | org))建议确实有效-我只需将它放在我的非编码部分,它的工作方式与下面的重写条件%{QUERY u STRING}^([&].](url=| target=|targeturl=| targetpage=| redirecturl=)(https?:?/([^&]*?\。(?:com | net | org))[NC]
RewriteCond %{QUERY_STRING} (^|&)(url|target|targeturl|targetpage|redirecturl)=(https?)[\%A-Z0-9]*2F([^&]*?\.(?:com|net|org)) [NC]
RewriteCond ${validDomains:%4} !validdomain