2009-08-05 42 views
7

我有一個網站提供基於子域的特定內容。所以它是同一組文件,並且網站頁面中的標題和一些信息可能基於子域進行更改。我可以在htaccess中執行if/then/else嗎?

我需要基於子域的不同htpassword身份驗證,但無法找到有關如何在htaccess中執行if/then類型的事情的信息。

基本上我需要的是這樣的:

如果子域= 'ABC' 使用該htpassword文件

如果子域= '高清' 使用該htpassword文件

可以這樣做?

回答

3

嘗試這樣的:

SetEnvIf Host ^abc\. HOST_ABC 
SetEnvIf Host ^dev\. HOST_DEF 

<IfDefine HOST_ABC> 
    AuthUserFile … 
</IfDefine> 
<IfDefine HOST_DEF> 
    AuthUserFile … 
</IfDefine> 
+0

這看起來很棒 - 由於時間限制,我最終不得不在PHP中構建一個簡單的身份驗證,但我想在測試環境中嘗試一下,因爲它似乎有意義。謝謝! – user151257 2009-08-07 15:26:07

+5

雖然看起來很有魅力,但對我來說卻不起作用。你會修改這個Gumbo嗎? – Devrim 2009-12-15 19:02:45

0

你使用哪個webserver?

一種可以在多個不同服務器上工作的技術(當然可以在Apache中工作)是在與每個子域對應的目錄中有一個不同的.htaccess文件。

+0

根據發佈的問題,它是相同的文件集,所以沒有單獨的直接保守黨。 – Amber 2009-08-05 18:31:16

+0

它是使用IIS和IISpassword和ISAPIrewrite3的Win 2003服務器。 您的解決方案將不起作用,因爲子域的文件系統中沒有物理上不同的文件集 - 所有子域都指向相同的一組文件,PHP會評估子域並顯示基於該域的不同數據。謝謝.. – user151257 2009-08-05 18:32:19

0

如果是我(和我都沒有想到之前做到這一點)我想:這取決於

  1. 使用mod_rewrite的到不同的站點根(/ SUBA或/ SUBB)使用內部重定向一些因素(模仿的if/else)
  2. 使用符號鏈接在公共目錄,但不是的.htaccess

這樣:

/sites/subdomain_a/.htaccess 
/sites/subdomain_a/pub 
/sites/subdomain_b/.htaccess 
/sites/subdomain_b/pub 

其中

/sites/subdomain_a/pub == /sites/subdomain_b/pub 

使用

ln -s 

或相似。然後使用mod_rewrite將(內部)重定向到正確的站點根目錄。我認爲 mod_rewrite在加載.htaccess之前運行。

這意味着您可以根據子域有效地爲具有不同.htaccess的相同站點文件提供服務。

希望這有助於一點點的破解。

希望看到更好的東西存在。

0

您不能使用if/else,因爲htaccess不是指令列表。但是,如果使用條件塊,如< IfModule mod_rewrite.c >或< IfDefine ,則可以根據請求的子域使用不同的指令。我不確定你會用哪一個...

你也可以放一個。htaccess文件高於文件的一個級別並使用<目錄>爲每個子域指定不同的規則,但使子域目錄全部爲符號鏈接到共享文件的同一目錄。

所以這將是上面的Web根目錄(S)的目錄:
的.htaccess
sitefiles
subdomain1(符號鏈接指向sitefiles)
subdomain2(符號鏈接指向sitefiles)
...

相關問題