Apache-2.2

htaccess 基於 IP 範圍的重定向

  • June 1, 2017

我這裡有點麻煩。我有帶有兩個介面和兩個不同 IP 地址的 wordpress 內網伺服器。此伺服器位於沒有 DNS 伺服器的私有 MPLS 中。使用者使用 IP 而不是域名。

我想為我的一個子網重寫 htaccess 中的地址,因此它使用如下重定向規則:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^10\.71\.(([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|255\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4])))$
RewriteRule ^(.*)$ http://10.71.2.246 [R=301,L]

這條規則不起作用。

遠端地址正則表達式應該是地址範圍10.71.0.1-10.71.255.254

我有幾個我認為不起作用的重寫規則。

我的問題是,當我想從範圍 10.71.xx 訪問附加到網站的某些媒體時,它會將我重定向到 10.1.2.xx ,這是第二個子網。此文件是從 10.1.2.xx subbne 上傳的,因此已硬連結到 10.1.2.180/xxxxxxx.pdf

所以過程如下——

  1. 使用者在http://10.71.xy訪問 Wordpress 站點
  2. 網站已返回,但包含硬連結到 10.1.xy 的媒體e.g <a href="http://10.1.x.y/mediafile.pdf">...</a>
  3. 使用者點擊該連結,該連結不起作用。

對於這個問題,htaccess 重寫將不起作用。當使用者從伺服器請求一個路徑並且您希望將它們定向到不同的路徑時,重寫非常有用。在您的情況下,客戶端點擊他們無法訪問的連結,因此請求永遠不會到達伺服器進行重寫。

在瀏覽器中手動將 IP 從 10.1.xy 更改為 10.71.xy(如對上一個答案的評論)完全不需要重寫。(事實上,如果重寫有效,您可能會進入重定向循環,因為每個請求都來自 10.71 地址,匹配條件並被重寫)

在我看來,有幾個選擇 -

  1. 讓 Wordpress 在任何地方都使用相對 URL,以便所有請求都發送到使用者最初在瀏覽器中鍵入的相同 IP 地址。不幸的是,Wordpress 似乎真的很喜歡完全限定的 URL,原因讓我無法理解。
  2. 在兩個使用者站點上設置 DNS 或主機條目,以便他們可以http://some.intranet.url在瀏覽器中輸入並將其解析為正確的 IP 地址。這意味著更新 Wordpress 以使用此 URL,這可能還需要使用外掛來查找和重寫數據庫中的舊 URL。(再說一次,Wordpress 真的很喜歡到處塞滿完整的 URL)。
  3. 使用某種過濾器(如果它不作為 Wordpress 外掛存在,我會感到驚訝)在 Wordpress html 生成後掃描它並用相關連結替換任何完全限定的連結。

選項 3 有點難看,但可能是最簡單的選項。這只是意味著找到一個可以掃描頁面http://10.a.b.c並將其刪除的外掛,以便將連結http://10.1.2.3/media/file.pdf變為/media/file.pdf. (注意:根據您的設置,可能需要進行一些調整,以確保它重寫所有需要的連結,但沒有什麼不需要)

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