Apache 重定向查询字符串值等于特定域

Apache 重定向查询字符串值等于特定域

我需要限制具有以下 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允许带有查询字符串的请求。禁止带有任何其他查询字符串或没有查询字符串的请求。

相关内容