Apache-2.2

Apache:基於客戶端 IP 的 DocumentRoot

  • March 31, 2014

我不知道這是否可以在 apache 上實現,在來這里之前我已經做了大量的研究。但:

我有一個在 :80 執行的 VirtualHost,ServerName 到 somedomain.tld。我想要實現的是,如果客戶端 10.2.1.4 訪問 somedomain.tld,客戶端將獲得來自 DocumentRoot /var/www/pages-1/ 的內容。然後如果 10.3.0. 訪問相同的 somedomain.tld,客戶端將從 DocumentRoot /var/www/pages-2/ 獲取內容。目前有沒有辦法實現這一目標?

您可以使用 RewriteRule 前面的 RewriteCond 檢查 remote_addr 來執行此操作(請記住使用 % 作為變數,而不是 $:

<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>

無法更改文件根目錄,但您可以根據客戶端 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 地址的數量非常大,使用外部重寫程序可能會更簡單。

引用自:https://serverfault.com/questions/336586