我需要将用户重定向到一个特定的页面,如果他们不是来自一个特定的IP,如果他们正在请求一个特定的域。
我试探着:
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^hello\.example\.com [NC] # the user requested https://hello.example.com
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.99 # the user's IP is not 123.456.789.99
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] # the user is not already on the redirected page
RewriteRule .* /maintenance.html [R=302,L]
但它不工作...
帮忙?
1条答案
按热度按时间tct7dpnv1#
HTTP_REFERER
包含 * refering * URL(Referer
HTTP请求头的内容,即用户 * 来自 * 的URL),而不是被请求的域。为此,您需要测试HTTP_HOST
服务器变量(即Host
HTTP请求头)。另请注意,Apache不支持行尾注解-您的第二个 condition(如所写)将由于无效的标志参数而导致500 Internal Server Error。
不需要检查所请求的URL不是
/maintenance.html
的第三个条件,因为这可以在RewriteRule
本身中更有效地检查。请尝试以下方法:
请注意,与
RewriteRule
* 模式 * 匹配的URL路径不以斜杠开头。=
前缀运算符)通常比使用正则表达式更容易/更简洁。例如:但是,如果您正在实施临时的“维护中”页面,则应考虑发送“503服务不可用”响应。
参考编号: