基于IP范围的htaccessredirect

我在这里遇到了一些麻烦。 我有两个接口和两个不同的IP地址的wordpress内联网服务器。 这台服务器是私有的MPLS,没有DNS服务器。 而不是域名用户使用IP。

我想重写htaccess中的一个我的子网地址,所以它使用redirect规则是这样的:

RewriteEngine On RewriteBase / RewriteCond %{REMOTE_ADDR} ^10\.71\.(([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|255\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4])))$ RewriteRule ^(.*)$ http://10.71.2.246 [R=301,L] 

此规则不起作用。

远程地址正则expression式应该是地址范围10.71.0.110.71.255.254

我有这几个重写规则,我认为不起作用。

我的问题是,当我想从10.71.xx范围访问附加到网站的一些媒体,它将我redirect到10.1.2.xx这是第二个子网。 这个文件是从10.1.2.xx子目录上传的,所以它已经被硬链接到了10.1.2.180/xxxxxxx.pdf

所以过程如下 –

  1. 用户通过http://10.71.xy访问WordPress网站
  2. 网站返回,但包括硬链接到10.1.xy的媒体, eg <a href="http://10.1.xy/mediafile.pdf">...</a>
  3. 用户点击链接,这是行不通的。

对于这个问题,一个htaccess重写将无法正常工作。 当用户从服务器请求一个path,并且您希望将它们引导到不同的path时,重写非常有用。 在你的情况下,客户端点击一个他们无法到达的链接,所以请求永远不会把它重新写入服务器。

在浏览器中手动将IP从10.1.xy更改为10.71.xy(如前面的回答中的评论)完全否定了重写的需要。 (事实上​​,如果重写工作,你可能会进入一个redirect循环,因为每一个请求将来自一个10.71地址,匹配的条件,并得到重写)

正如我所看到的,有几个选项 –

  1. 让Wordpress在每个地方都使用相对URL,以便所有的请求都可以使用用户在浏览器中input的相同IP地址。 不幸的是WordPress的似乎真的很喜欢完全合格的url,原因是逃脱我。
  2. 在两个用户站点上设置DNS或主机条目,以便他们可以在浏览器中inputhttp://some.intranet.url ,并将其parsing为正确的IP地址。 这就意味着要更新Wordpress来使用这个URL,这也可能需要使用插件来查找和重写数据库中的旧URL。 (再次,WordPress的确喜欢在整个地方塞满完整的URL)。
  3. 使用某种filter(如果不存在Wordpress插件,我会感到惊讶)在生成Wordpress html之后扫描它,并用相关的链接replace完全限定的链接。

选项3有点丑,但可能是最简单的select。 它只是意味着find一个插件,可以扫描http://10.abc的页面,并将其删除,以便链接到http://10.1.2.3/media/file.pdf变成/media/file.pdf 。 (注意:根据您的设置,可能需要调整一下,以确保它重写所有需要的链接,但没有它不)

远程地址正则expression式应该是地址范围10.71.0.110.71.255.254

你的正则expression式可以大大简化。 相反,我会把它看作是从10.71开始的任何IP地址,但不包括10.71.0.010.71.255.255这看起来就是你所描述的。 (?)

 RewriteEngine On RewriteCond %{REMOTE_ADDR} ^10\.71 RewriteCond %{REMOTE_ADDR} !^10\.71\.0\.0$ RewriteCond %{REMOTE_ADDR} !^10\.71\.255\.255$ RewriteRule ^ http://10.71.2.246%{REQUEST_URI} [R=302,L] 

我假定你想要redirect和维护URLpath,而不是将所有请求redirect到文档根目录?

这是一个302 (临时)redirect。 只有在确定工作正常后才能更改为301 (永久)。 确保在testing之前清除浏览器caching。

但是,这似乎有点奇怪… REMOTE_ADDR是连接到站点的用户的本地IP地址(假设没有涉及代理服务器),但是您redirect到一个相同的IP地址?