2011-11-06 85 views
3

AFAIK默認情況下,導致所要求的文件中的所有目錄中的所有.htaccess文件進行解析,即在此設置:如何防止.htaccess繼承?

  • DOC_ROOT = /usr/local/www/data
  • AllowOverride在上述目錄設置爲All

如果請求的文件號爲/dir1/dir2/dir3/file,則將檢查/關閉的所有文件夾是否爲.htaccess。如果找到該文件,則會解析該文件,然後根據.htaccess文件的組合內容繼續執行。

因此,這裏是我的設置:

  • DOC_ROOT = /usr/local/www/data - 這就是所有的靜態和PHP文件的保存。
  • DOC_ROOT中有.htaccess,它重寫除index.php以外的所有請求。
  • 有一個在DOC_ROOT一個/Python/root.wsgi並在httpd.conf中有這樣的:WSGIScriptAlias /apps /usr/local/www/data/Python/root.wsgi

正如你可以想像我不想將所有用於/ Python的文件夾的.htaccess,但它是。我如何防止它?

我試着在httpd.conf設置這一點,但它不會做的工作:

<Directory "/usr/local/www/apache22/data/Python"> 
    AllowOverride None 
</Directory> 

如果我不把在Python文件夾的.htaccess與RewriteEngine off,似乎做的工作,但我不希望被迫將這樣的文件放在每個我不希望根目錄使用的.htaccess子文件夾中。

回答

4

不幸的是,沒有辦法禁用繼承。更簡單的方法可能是在web根目錄中爲「其他」創建一個文件夾,並在其中的.htaccess中放置RewriteEngine off語句。

我想你可以用RewriteCond做點什麼來禁用它。如果您希望所有子文件夾都可以訪問(並重寫與現有子文件夾不匹配的任何內容),則可以使用RewriteCond !-d

+0

而且你不能通過AllowOverride選項來改變它嗎? –

+1

要回答我自己的問題 - AllowOverride的工作基於每個目錄的基礎上,即如果設置爲無文件夾,這是一個啓用它的子文件夾,它的父級的.htaccess將被解析,但它自己不。 –

0

最簡單的方法是在每個目錄的基礎上將它設置在站點的.htaccess根目錄下。

因此,假設你有一個子目錄「Python」,你可以將它添加到你的DOCROOT中的.htaccess。

RewriteRule^Python /.*$ - [L]