基于 IP 地址的条件 DirectoryIndex,使用 .htaccess

基于 IP 地址的条件 DirectoryIndex,使用 .htaccess

我有这个httpd.conf

<VirtualHost xx.xxx.xx.xxx>
    Options All +ExecCGI
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/domain.com
    ServerName  dl.domain.org
    DirectoryIndex dlindex1.html
</VirtualHost>

...这很好(我需要作为DirectoryIndex我们的“dl.domain.org”子域),现在我还需要DirectoryIndex根据 IP 地址进行更改,使用.htaccess.这可能吗?

StackOverflow 帖子告诉我我不能有条件DirectoryIndex地设置..但是相反使用RewriteRule.如果这是真的,那么好吧,但是什么RewriteCondRewriteRule?我尝试了很多方法,包括(实际 IP 是我们 2 个开发人员的 IP):

RewriteCond %{REMOTE_ADDR} ^111\.222\.333\.444$    [OR]
RewriteCond %{REMOTE_ADDR} ^555\.666\.777\.888$
RewriteCond %{SERVER_NAME} ^dl.domain.org
RewriteRule ^(.*)/$ $1/dlindex2.html

..或者甚至只是(作为绝对测试):

RewriteCond %{REMOTE_ADDR} ^555\.666\.777\.888$
RewriteRule (.*)/dlindex1.html$ $1/dlindex2.html

但似乎无论我尝试什么,它都只是提供DirectoryIndex dlindex1.htmlas per httpd.conf,而不是dlindex2.html当开发者 IP 调用时我希望作为该子域中的默认页面提供服务。

任何人都可以指出我可以做些什么来实现我所追求的目标吗?即:...实际上,或者只是有效地,DirectoryIndex基于 IP 地址进行更改,.htaccess即时使用?

答案1

假设我们希望 IP 地址 12.34.56.78 转到 /var/www/client1/* 并且我们希望 IP 地址 87.65.43.21 转到 /var/www/client2/*

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteRule (.*) /client1/$1

RewriteCond %{REMOTE_ADDR} ^87\.65\.43\.21$
RewriteRule (.*) /client2/$1

为您需要为其提供特殊页面的每个 IP 创建一组“RewriteCond”和“RewriteRule”。

操作分解:

  1. 客户端87.65.43.21连接
  2. 规则检查客户端是否为 12.34.56.78,否则不是
  3. 然后服务器进入第二个条件
  4. 检查客户端是否为87.65.43.21,是
  5. 服务器现在执行作为已通过测试的条件的一部分的 RewriteRule,并提供页面 /client2/(file_requested)。

OP 澄清了他的问题,他不需要单独的文件夹,但需要提供不同的索引页面,这里是该工作的 .htaccess 示例:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteCond %{REQUEST_URI} index\.html$
RewriteRule .* /index-page-client1.html

RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteCond %{REQUEST_URI} index\.html$
RewriteRule .* /index-page-client2.html

上述规则将另外检查请求的文件是否是“index.html”,我假设您只想重定向“index.html”的请求

相关内容