我有这个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
.如果这是真的,那么好吧,但是什么RewriteCond
和RewriteRule
?我尝试了很多方法,包括(实际 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.html
as 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”。
操作分解:
- 客户端87.65.43.21连接
- 规则检查客户端是否为 12.34.56.78,否则不是
- 然后服务器进入第二个条件
- 检查客户端是否为87.65.43.21,是
- 服务器现在执行作为已通过测试的条件的一部分的 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”的请求