Apache-2.2

Htaccess 身份驗證,基於伺服器,而不是客戶端資訊

  • November 9, 2011

在目前的項目中,我們有單獨的開發和生產。兩者的程式碼都在單個 SVN 儲存庫中。

問題在於從外部訪問開發環境。假設我們有兩個獨立的伺服器用於生產和開發:

1.2.3.4 -> production
5.6.7.8 -> development

這個想法是在兩台伺服器上使用相同的 .htaccess 和 Auth,但行為必須是:

  • 在開發伺服器上,使用者必須在訪問站點之前驗證自己
  • 在生產伺服器上,使用者具有完全訪問權限,無需 Auth。

它應該是這樣的(虛擬碼):

IF $SERVER_IP == 5.6.7.8 THEN
   require_auth
ELSE 
   do_not_require_auth

我們試圖用盡可能少的附加模組來實現這一點,但遺憾的是,根據伺服器資訊,我們找不到任何關於如何在 .htaccess 中執行條件的資訊。

甚至可能嗎?

您應該將這些添加到您的 .htaccess 身份驗證/授權指令中。

setenvif Server_Addr=1.2.3.4 okpublic
allow from env=okpublic
require valid-user
satisfy any

如果伺服器地址是 1.2.3.4,那麼我們設置一個環境變數,我們將在第二行使用它來允許任何人訪問。如果伺服器地址不是 1.2.3.4,則使用者必須進行身份驗證。如果滿足這兩個規則中的任何一個,則授予訪問權限。

我所做的很奇怪,但是哦,好吧,如果這是你想要的:)

另一種更簡單的解決方案是在生產伺服器上使用 svn propedit svn:ignore 進行 svn 更新時忽略 .htaccess 文件。如果您需要在 prod 和 dev 上有不同的 .htaccess 文件,那麼也許您想研究分支、合併等,或者多用途 .htaccess 文件可能更好。我也想提一下 svn 控制項。

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