根据 IP 范围进行 htaccess 重定向

根据 IP 范围进行 htaccess 重定向

我这里有点麻烦。我有一个 wordpress 内联网服务器,它有两个接口和两个不同的 IP 地址。此服务器位于私有 MPLS 中,没有 DNS 服务器。用户使用 IP 而不是域名。

我想在 htaccess 中重写我的一个子网的地址,以便它使用如下重定向规则:

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]

这条规则不起作用。

远程地址正则表达式应为地址范围10.71.0.1-10.71.255.254

我有几条重写规则,但我认为它们不起作用。

答案1

我的问题是,当我想从 10.71.xx 范围访问连接到网站的某些媒体时,它会将我重定向到 10.1.2.xx,即第二个子网。此文件是从 10.1.2.xx 子网上传的,因此已硬链接到 10.1.2.180/xxxxxxx.pdf

因此,流程如下 -

  1. 用户访问 Wordpress 网站http://10.71.xy
  2. 网站已返回,但包含硬链接到 10.1.xy 的媒体e.g <a href="http://10.1.x.y/mediafile.pdf">...</a>
  3. 用户点击该链接,但不起作用。

对于此问题,htaccess 重写将不起作用。当用户从服务器请求一个路径并且您想将其定向到其他路径时,重写很有用。在您的案例中,客户端单击了他们无法访问的链接,因此请求永远不会到达服务器进行重写。

在浏览器中手动将 IP 从 10.1.xy 更改为 10.71.xy(如上一个答案的评论中所述)完全消除了重写的需要。(事实上,如果重写成功,您可能只会陷入重定向循环,因为每个请求都来自 10.71 地址,符合条件并被重写)

我认为有两种选择 -

  1. 让 Wordpress 到处都使用相对 URL,这样所有请求都会发送到用户最初在浏览器中输入的同一 IP 地址。不幸的是,Wordpress 似乎非常喜欢完全限定的 URL,原因我不太清楚。
  2. 在两个用户站点上设置 DNS 或主机条目,以便他们可以http://some.intranet.url在浏览器中输入并解析到正确的 IP 地址。这意味着更新 Wordpress 以使用此 URL,这可能还需要使用插件在数据库中查找和重写旧 URL。(同样,Wordpress 确实喜欢在各处填充完整的 URL)。
  3. 使用某种过滤器(如果这个 Wordpress 插件不存在的话我会感到惊讶)在生成 Wordpress html 后对其进行扫描,并用相对链接替换任何完全合格的链接。

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

答案2

远程地址正则表达式应为地址范围10.71.0.1-10.71.255.254

您的正则表达式可以大大简化。我宁愿将其视为以 开头10.71但不包括10.71.0.0和 的任何 IP 地址10.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]

我假设您想要重定向并维护 URL 路径,而不是将所有请求重定向到文档根目录?

目前这是(临时)重定向。只有当您确定它正常工作时才302更改为(永久)重定向。请确保在测试前清除浏览器缓存。301

但是,这确实看起来有点奇怪...REMOTE_ADDR是连接到站点的用户的本地 IP 地址(假设没有涉及代理服务器),但您重定向到同一个 IP 地址之一?

相关内容