关键词:
【中文标题】使用 RewriteCond 重定向一系列 IP【英文标题】:Redirect a range of IPs using RewriteCond 【发布时间】:2012-07-24 02:30:59 【问题描述】:目前我正在重定向除 IP 12.345.678.90 之外的所有用户,使用:
RewriteEngine On
RewriteCond %REQUEST_URI !/maintenance$
RewriteCond %REMOTE_HOST !^12\.345\.678\.90
RewriteRule $ /maintenance [R=302,L]
我将使用什么语法来允许范围?在我的允许列表中,我有:
Allow from 123.45.678.90/28
如果我只是将 REMOTE_HOST 行更新为:
RewriteCond %REMOTE_HOST !^12\.345\.678\.90/28
【问题讨论】:
【参考方案1】:您可能希望 %REMOTE_ADDR
与之匹配,但您不能使用 CIDR 表示法,因为 %REMOTE_ADDR
实际上是远程地址,您可以使用正则表达式尝试匹配反对。所以对于 123.45.67.89/28,(123.45.67.80 - 123.45.67.95),你必须这样做:
RewriteCond %REMOTE_ADDR !^123\.45\.67\.8[0-9]$
RewriteCond %REMOTE_ADDR !^123\.45\.67\.9[0-5]$
【讨论】:
如果你想匹配更大的范围——例如,不确定的第三和第四个八位字节——你可以做!^123\.45\.[0-9]1,3\.[0-9]1,3$
——这将匹配第三和第四个八位字节中0-255之间的任何数字,但让您定义 IP 的前半部分。最近不得不在我正在开发的 WordPress 上执行此操作,以允许 WordPress JetPack 服务器连接到 XML-RPC 端点,同时仍将常规访问者重定向到单独的站点。
效率很低RewriteCond
, @zts answer is way better
这个问题在 Apache 2.2 被广泛使用时得到了回答,现在一切都是 2.4,所以使用 expr 会更好【参考方案2】:
如果您使用的是 Apache HTTPD 2.4 或更高版本,则可以使用 expressions 将 REMOTE_ADDR 与 CIDR 掩码匹配。
简写如下:
RewriteCond expr "-R '192.168.1.0/24'"
以下更长的形式也可用,但文档表明它的效率较低:
RewriteCond expr "%REMOTE_ADDR -ipmatch '192.168.1.0/24'"
这使得您的示例的完整解决方案如下所示:
RewriteEngine On
RewriteCond %REQUEST_URI !/maintenance$
RewriteCond expr "! -R '12.345.678.90/28'"
RewriteRule $ /maintenance [R=302,L]
【讨论】:
问题:你能举个简短的例子吗?尚不清楚它是如何引用%REMOTE_ADDR
,而%REMOTE_ADDR
以更长的形式明确指出。
@plusjeff 我不确定你的意思 - 上面包含了简短形式的示例。从链接的文档中,-R 是Same as "%REMOTE_ADDR -ipmatch ...", but more efficient
。
-R
是否代表%REMOTE_ADDR
?如果是这样,如何使用高性能简短形式来检查不同的变量(即说我想用简短形式检查一个名为%CLIENT_IP
的变量?如果我使用不同的变量,我是否总是必须使用更长的形式?
是的,对于其他变量,您必须使用较长的形式。 -R
专门用于REMOTE_ADDR
。【参考方案3】:
我喜欢使用以下允许部分地址匹配的方法。在您的virtualHost/htaccess
文件中
SetEnvIf HOST "siteYouAreworkingON.com" ACCESS_CONTROL<br>
SetEnvIf Remote_Addr "list of full or partia ipadresses separated by |"<br>
RewriteCond %ENV:ACCESS_CONTROL 1<br>
RewriteRule .* http://gohere.instead [L,R]
希望对你有帮助。
【讨论】:
【参考方案4】:虽然这是一个老问题,但我发现它仍然非常相关。以下是允许 CIDR 表示法的替代方法(示例在虚拟主机 apache conf 文件中):
<VirtualHost *:80>
.
.
.
<Files maintenance>
Require all denied
Require ip 12.345.678.90/28
</Files>
.
.
.
</VirtualHost>
作为旁注,我怀疑,在没有进行任何测试或发现任何证据的情况下,这种方法比提到的RewriteCond expr "-R '192.168.1.0/24'"
方法“更快”。
原因很简单,在这个高层次上似乎涉及的计算步骤较少。
注意来自被拒绝 IP 的请求者将看到“Permission denied”或“Forbidden”类型的响应。您可以通过添加以 200/OK 响应的自定义 404 页面来使其更漂亮(这样 Google 不会惩罚您的域)。 200/OK 必须是自定义 404 页面的第一行。例如在 PHP 中,第一行是:
<?php header("Status: 200 OK"); ?>
您希望对重定向到的合法页面执行此操作。实际的 404 应该以 404 响应,以防止我们在路上遇到大量无用的搜索引擎结果。
【讨论】:
【参考方案5】:在 .htaccess 中试试这个。它正在工作。
RewriteCond %REMOTE_ADDR !^123\.456\.789\.[0-255]
【讨论】:
强制 SSL 重定向 - Apache/IHS RewriteCond 和 RewriteRule
】强制SSL重定向-Apache/IHSRewriteCond和RewriteRule【英文标题】:ForceSSLredirect-Apache/IHSRewriteCondandRewriteRule【发布时间】:2012-05-0321:22:12【问题描述】:我正在尝试设置一个重写规则,该规则将强制进入端口80的所有请求强制使用HTTPS。... 查看详情
使用基于浏览器语言的 htaccess 从和到子域重定向
...要根据用户的语言重定向主页中的用户。我想我必须使用RewriteCond%HTTP:Accept-Language但我想不通。我的最后一次尝试:重写引擎开启RewriteCond%HTT 查看详情
如果任何目录具有特定的查询字符串,则重定向(代码片段)
...个wordpress网站,如果这应该有所作为。这是我尝试过的:RewriteCond%REQUEST_URI^/(.+)RewriteCond%QUERY_STRING^redirectme=1$RewriteRule^/?$http://example.com/?[R=301,L]和RewriteCond%REQUEST_URI^/(.+)RewriteCond%QUERY_STRING^redirectme=1$RewriteRule(.*)http://example.com/?[R=301,L]... 查看详情
维护重定向
OptionsFollowSymLinks RewriteEngineOn RewriteCond%REQUEST_URI!/maintenance.html$RewriteCond%REQUEST_URI!/marrowtanance.png$ RewriteRule$/maintenance.html[R=302,L] 查看详情
RewriteCond REQUEST_URI - ^ 没有按预期工作
】RewriteCondREQUEST_URI-^没有按预期工作【英文标题】:RewriteCondREQUEST_URI-^doesn\'tworkasexpected【发布时间】:2012-09-1001:23:22【问题描述】:我正在使用codeigniter构建一个站点。我在.htaccess文件中有一系列重写条件和规则。第一组规则根... 查看详情
重定向 - 总共 4 个参数
...的成就。这是我目前所拥有的:##1strulewithoneparameter:$id--RewriteCond%ENV:REDIRECT_STATUS^$RewriteCond%QUERY_STRIN 查看详情
.htaccess 使用 php slug 重定向
】.htaccess使用phpslug重定向【英文标题】:.htaccessredirectwithphpslug【发布时间】:2016-03-0215:45:52【问题描述】:我的重写代码是:RewriteEngineonRewriteCond%THE_REQUEST^[A-Z]3,9\\/(.*)index\\.php($|\\|\\?)RewriteRule^/%1[R=301,L]RewriteCond%REQUEST_FILE 查看详情
使用 php 只需一次地理重定向用户
】使用php只需一次地理重定向用户【英文标题】:Georedirectuserjustonceusingphp【发布时间】:2013-06-0414:02:18【问题描述】:当用户登陆site.com/redirect.php时,我可以轻松使用此脚本他们根据地理IP被重定向到适当的TLD但是当我在“index.... 查看详情
如何将.htm重定向到特定域的非.htm?(代码片段)
我想重定向“简单”这样的东西:RewriteCond%HTTP_HOST^(www.)?old-domain.com$[NC]RewriteRule^(.*)contact.htm$https://new-domain.com/contact/[R=301,L]但这不起作用。我必须使用RewriteCond,因为我正在处理一个多域实例。有人能告诉我什么是缺失或错误的... 查看详情
重定向301多明尼奥斯
Tipicocasodesitiocondosdominios,ypaginasconparámetros.RewriteCond%HTTP_HOST^dominio.com.ar$[OR]RewriteCond%HTTP_HOST^www.dominio.com.ar$RewriteRule^(.*)$http://www.dominio.com/$1[R=301,L] 查看详情
将 ssl 重定向到非 ssl
...运气。这可以通过htaccess完成吗?重写引擎开启RewriteBase/RewriteCond%HTTPS开启RewriteCond%HTTP_HOSTwww.mydomain.org重写规则(.*)http://www.mydo 查看详情
所有页面的joomla301重定向
RewriteEngineOn ##########Begin-301Redirect#RewriteCond%THE_REQUEST^[A-Z]3,9/([^/]+/)*(index|home).html?HTTP/RewriteRule^(([^/]+/)*)(index|home).html?$http://www.yoursite.com/$1[R=301,L]#RewriteCond%THE_REQUEST!^POSTRewriteCond%THE_REQUEST^[A-Z]3,9/([^/]+/)*index.phpHTTP/RewriteCond%SERVER_PORT... 查看详情
只允许某些ip地址使用mod_rewrite访问网站?(代码片段)
...所以我们有这个.htaccess文件来尝试让它工作:RewriteEngineonRewriteCond%(REMOTE_ADDR)!^123.123.123.123RewriteCond%(REMOTE_ADDR)!^124.124.124.124RewriteCond%REMOTE_ADDR!^125.125.125.125RewriteCond%REMOTE_ADDR!^126.126.126.126RewriteCond%REMOTE_ADDR!^127.127.127.127RewriteCond%REMOTE_AD... 查看详情
在表达式引擎重定向循环上强制使用 HTTPS
...,但是当我添加任何这些规则时,它会显示重定向循环。RewriteCond%HTTPSoffRewriteRule 查看详情
将非 www 重定向到 www 以获取 https
】将非www重定向到www以获取https【英文标题】:RedirectNON-wwwtowwwforhttps【发布时间】:2016-09-1111:36:39【问题描述】:我有以下重定向RewriteCond%HTTP_HOST!^www\\.RewriteRule^(.*)$http://www.%HTTP_HOST/$1[R=301,L]RewriteCond%HTTPS!onRewriteRule(.*)https://%HT 查看详情
.htaccess https 到 http 重定向与现有规则冲突
...】:目前我们在.htaccess中有这个规则RewriteEngineon<br>RewriteCond%REQUEST_URI!^/site/RewriteCond%REQUEST_FIL 查看详情
如何将子站点重定向到另一个子站点
...4:59:14【问题描述】:我有一个网站example.com。我正在尝试使用.htaccess将www.example.com/series重定向到www.example.com/product。以及附加到产品的系列之后的任何操作,例如www.example.com/series/ 查看详情
将非 WWW 重定向到 WWW URL
...ss中添加了以下代码RewriteEngineonOptions+FollowSymlinksRewriteBase/RewriteCond% 查看详情