Apache-Httpd

基於 IP 地址的條件 DirectoryIndex,使用 .htaccess

  • August 25, 2018

我有這個httpd.conf

<VirtualHost xx.xxx.xx.xxx>
   Options All +ExecCGI
   ServerAdmin hostmaster@thehost.com
   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,在飛行中?

假設我們希望 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”的請求

引用自:https://unix.stackexchange.com/questions/44129