想要重定向除我之外的所有访问者

Want to redirect all visitors except for me

提问人:Andrew G. Johnson 提问时间:11/16/2008 最后编辑:RavinderSingh13Andrew G. Johnson 更新时间:3/7/2023 访问量:32354

问:

基本上,我即将开始在一个网站上工作,我想要一些可以添加到我的.htaccess文件(或其他地方)的东西,该文件的工作方式类似于以下伪代码:(我的IP将代替127.0.0.1)

if (visitors_ip <> 127.0.0.1)
    redirectmatch ^(.*)$ http://www.example.com/under-construction.html

希望这是有道理的......

.htaccess mod-重写 http-status-code-302

评论


答:

32赞 VonC 11/16/2008 #1

这将是这样的

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1

RewriteCond %{REQUEST_URI} !/mypage\.html$  

RewriteRule .* http://www.anothersite.com/mypage.html [R=302,L]

正如 Andrew 所指出的,如果重定向到同一域,%{REQUEST_URI} 条件可以避免无限循环。

正如 Xorax 在将近 9 年后评论的那样:

你不应该使用,它在很多情况下都会失败。您应该使用 .
Cf“REMOTE_HOSTREMOTE_ADDR的区别
REMOTE_HOSTREMOTE_ADDR"

评论

0赞 Chris Johnson 11/18/2012
现在 IPv6 在图片中,我发现在某些情况下,localhost IP 地址以 ::1 的形式出现,并不总是 127.0.0.1——不确定何时以及为什么,但要处理这个问题,我认为你需要一个额外的条件:冒号不应该要求转义——不是重写引擎正则表达式的特殊字符,我不相信。RewriteCond %{REMOTE_HOST} !^::1
2赞 Xorax 8/24/2017
你不应该使用REMOTE_HOST,它在很多情况下都会失败。您应该使用REMOTE_ADDR。stackoverflow.com/questions/3812166/......
2赞 VonC 8/24/2017
@Xorax 谢谢。我已经修改了我 9 岁的答案。
0赞 Eliza Brock Marcum 11/16/2008 #2

使用这种方法时要小心。

我因采用基于 IP 的方法来限制访问而感到筋疲力尽,然后失去了对我的 IP 地址的租约。

当然,您可以随时通过 SSH 连接到有问题的框中并再次更改 .htaccess 文件,但是如果您不希望它发生,那么当您试图弄清楚刚刚发生的事情时,5 分钟的恐慌就不太有趣了。

我建议改用 .htaccess(与 htpasswd 文件结合使用)来请求访问开发站点的凭据。

一个很好的例子是:http://aplawrence.com/foo-web/htaccess-authentication.html

评论

0赞 Andrew G. Johnson 11/16/2008
是的,谢谢,很好,但我不会保持这个阵容超过一两个星期。
0赞 Eliza Brock Marcum 11/16/2008
根据网络的设置方式,您的租用时间可能比这短得多。
3赞 Andrew G. Johnson 11/18/2008 #3

这是我最终使用的解决方案,请注意,它与 VonC 的解决方案相似,只是如果您选择重定向到同一域,他会导致无限循环。

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1
RewriteCond %{REQUEST_URI} !/coming-soon\.html$ 
RewriteRule .* http://www.andrewgjohnson.com/coming-soon.html [R=302,L]

还应该注意的是,302 是临时移动,应该使用而不是无或 301。

评论

0赞 VonC 11/18/2008
我刚刚在我的答案中添加了您的额外重写条件,以便彻底.
2赞 CoRe 4/14/2013 #4
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect all except allowed IP
ReWriteCond %{REMOTE_ADDR} !^000\.000\.000\.001$
RewriteCond %{REMOTE_ADDR} !000\.000\.000\.002$
ReWriteCond %{REMOTE_ADDR} !^000\.000\.000\.003$
RewriteRule (.*) http://YourOtherWebsite.com/$1 [R=301,L] 
</IfModule>

在 WordPress ifmodule 之前 这将重定向除有问题的 3 个 IP 地址之外的所有人。

如果您的 IP 地址发生变化,您只需 ftp 到该站点并编辑 .htaccess 文件。

0赞 oxido 3/7/2023 #5
<IfModule mod_rewrite.c>
 RewriteEngine On
#IPv4
 RewriteCond %{REMOTE_ADDR} !^26\.122\.33\.214 
#IPv6
 RewriteCond %{REMOTE_ADDR} !^2a01\:3f0d\:e31e\:c410\:98b\:a6ff\:45b0\:5132
#avoid infinite loop
 RewriteCond %{REQUEST_URI} !/offline/index.html$ [NC]
#allow images to be accessed
 RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
#redirect to the offline page or other URL.
 RewriteRule .* /offline/index.html [R=302,L]
</IfModule>