2013-12-15 30 views
0

我有使用甲基苯丙胺我的OS X的機器上運行的本地服務器環境,和我目前設置了一些虛擬主機。我發現,爲了讓我的一個虛擬主機識別我的網站的.htaccess文件,我需要在<VirtualHost>指令中添加<Directory>指令。阿帕奇:<Directory>指令沒有指定路徑

這裏是我使用的配置我的虛擬主機一個什麼樣的一個例子:

<VirtualHost *> 
    DocumentRoot "/path/to/mysite" 
    ServerName mysite.local 
    <Directory "/path/to/mysite"> 
     AllowOverride All 
     Order Allow,Deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

現在,我想通過從<Directory>指令取出路徑,以避免冗餘。我試圖這樣做,它似乎工作,雖然我不熟悉Apache足以知道這樣做的潛在後果。此外,我無法在Apache文檔中找到這種情況的解釋。

這是我會像做:

<VirtualHost *> 
    DocumentRoot "/path/to/mysite" 
    ServerName mysite.local 
    <Directory> 
     AllowOverride All 
     Order Allow,Deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

因此,我的問題是這樣的:當我忽略從<Directory>指令的路徑出現(在這種情況下)是什麼?

回答

1

Directory是一個指令針對文件系統目錄,並應始終有一個路徑(waildcards允許)。

使用一些指令將目標設置爲無目錄可能會被靜默丟棄,或者可能有錯誤(您可以測試它),但肯定會是無用

你爲什麼會寫有針對性地沒有目錄的所有一些配置說明?

但你的問題中可能還有更多的東西。

通常遊戲一個虛擬主機應該至少包含一個目錄指令,DocumentRoot的目錄,而且通常還要增加一個針對文件系統的根,是這樣的:

<Directory /> 
    (instructions to deny access and avoid .htaccess reads) 
</Directory> 
<Directory /my/document/root/> 
    (instructions to allow access and still avoid .htaccess reads or to allow them if you are lazy and feel over confident that .htaccess are useful in any way and you do not need speed) 
</Directory> 

而且你可以添加更多的,尤其是避免使用.htaccess文件,因爲存儲在/path/to/somewhere中的文件與<Directory /path/to/somewhere>節中的文件相同,但速度較慢。

現在你不喜歡在你的VH配置中重複自己,所以你可能會使用.htaccess文件或通常在那裏設置的全局級別指令。你也可以使用另一個神奇的關鍵字,這是位置

您可以使用大量的Apache指令在<Location /foo>指令。位置適用於網址,而不是文件系統路徑。

所以<Location />是你的documentRoot,而<Location /foo>也許就是你DocumentRoot下的子目錄'foo'。這可以幫助您在VH中編寫內容,而無需在所有地方重用documentroot前綴。但要小心,url不是文件系統路徑。與在目錄級別上應用的保護相比,對url級別應用的任何保護可能更弱或更強。這取決於你的別名,你使用網址的方式等。

更新

如果使用新的Apache 2.4版本,現在可以使用mod_macro或更容易,built-in variables support

Define docroot "/path/to/mysite" 
DocumentRoot ${docroot} 
<Directory ${docroot}> 
    (...)