我需要限制具有以下 URL 的特定查询字符串模式
https://beta-portal.example.com/public/wp-login.php?redirect_to=http://demo.testfire.net
我需要将 redirect_to 值限制为 https://*.example.com,如果在 redirect_to 中传递了任何其他 URL,它应该发送 403 禁止错误。
我尝试了类似下面的方法,但没有按预期工作。它总是发送 403 禁止错误。
RewriteCond %{QUERY_STRING} !.*redirect_to=*.example.com.* [NC]
RewriteRule "" "-" [F]
您能否帮助我找到正确的语法来实现上述否定规则?
提前致谢。
答案1
RewriteEngine On
RewriteCond %{QUERY_STRING} ^redirect_to [NC]
RewriteCond %{QUERY_STRING} !^redirect_to=https://.+\.example\.com$ [NC]
RewriteRule "" "-" [F]
允许访问带有查询字符串(和不带有查询字符串)的请求
?foo=bar
?redirect_to=https://foo.example.com
?redirect_to=https://BAR.example.com
禁止访问带有查询字符串的请求
?redirect_to
?redirect_to=
?redirect_to=abc
?redirect_to=https://example.com
?redirect_to=https://.example.com
如果删除第一个RewriteCond
,则仅redirect_to=https://*.example.com
允许带有查询字符串的请求。禁止带有任何其他查询字符串或没有查询字符串的请求。