Apache-2.2
Apache:基於客戶端 IP 的 DocumentRoot
我不知道這是否可以在 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 地址的數量非常大,使用外部重寫程序可能會更簡單。