Apache:基于客户端 IP 的 DocumentRoot

Apache:基于客户端 IP 的 DocumentRoot

我不知道这在 Apache 上是否可以实现,在来这里之前我已经做了大量的研究。但是:

我有一个 VirtualHost 在 **:80* 上运行,ServerName 为 somedomain.tld。我想要实现的是,如果客户端 10.2.1.4 访问 somedomain.tld,客户端将获得来自 DocumentRoot /var/www/pages-1/ 的内容。然后,如果 10.3.0.* 访问相同的 somedomain.tld,客户端将从 DocumentRoot /var/www/pages-2/ 获取内容。目前有什么方法可以实现这一点吗?

答案1

您可以使用 RewriteRule 来执行此操作,前面是检查 remote_addr 的 RewriteCond(记住对变量使用 %,而不是 $:

<VirtualHost *:80>
  Servername somedomain.tld

  RewriteEngine On
  RewriteCond %{REMOTE_ADDR} 10.2.1.4
  RewriteRule ^(.*)$ /var/www/pages-1/$1

  RewriteCond %{REMOTE_ADDR} 10.3.0.
  RewriteRule ^(.*)$ /var/www/pages-2/$1

</VirtualHost>

答案2

无法更改文档根目录,但您可以根据客户端 IP 重写 URL,类似于...(未经测试)...

RewriteCond %{REMOTE_HOST} ^10\.3\.0\.
RewriteRule ^/(.*) /pages-2/$1 [P,L]

RewriteCond %{REMOTE_HOST} ^10\.2\.1\.4$
RewriteRule ^/(.*) /pages-1/$1 [P,L]

虽然使用外部重写程序如果 IP 地址数量非常大。

相关内容