重寫 URL 時,DirectoryIndex 無法正常工作
我有
domain.com
並sub.domain.com
指向同一台伺服器,並且我正在使用 mod_rewrite 重寫子目錄sub.domain.com
的URL。我在文件根目錄中sub
有以下文件:.htaccess
DirectoryIndex index.html index.php # Prevent infinite rewrite loop. RewriteCond %{ENV:REDIRECT_STATUS} ^$ # Send all requests addressing sub.domain.com... RewriteCond %{HTTP_HOST} =sub.domain.com [NC] # ...to the /sub directory. RewriteRule ^ /sub%{REQUEST_URI} [QSA]
在
sub
我有index.php
和沒有的目錄中index.html
,但請求http://sub.domain.com
似乎index.php
完全忽略並返回 404。但是,如果我在index.html
那裡,它會被提供。我能得到服務的唯一方法index.php
是設置DirectoryIndex index.php
但這不是我想要為整個網站做的事情。
奇怪的是,文件根目錄以外的 URL 表現出正常
DirectoryIndex
行為。例如, try在返回 404 之前http://sub.domain.com/search
查找sub/search/index.html
then 。sub/search/index.php
如果我
sub
從父域查詢目錄http://domain.com/sub
,我可以看到index.php
,這讓我對這個問題完全目瞪口呆。我會包含 Apache 錯誤日誌,但我使用的是共享主機並且無法增加日誌記錄的詳細程度。此外,我無法在本地重現此錯誤。Web 託管伺服器使用的是 Apache 2.4.3,而我的本地伺服器是 Apache 2.4.9。
升級到包括 Apache 2.4.7 的 Ubuntu 14.04 後,我遇到了類似的問題。
這是我的解決方法。用模擬 ,然後禁用。
mod_dir``mod_rewrite``DirectoryIndex
#DirectoryIndex index.html index.php index.htm DirectoryIndex disabled RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} /$ RewriteCond %{REQUEST_FILENAME}index.html -f RewriteRule ^(.*)$ $1index.html [L] RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} /$ RewriteCond %{REQUEST_FILENAME}index.php -f RewriteRule ^(.*)$ $1index.php [L] RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} /$ RewriteCond %{REQUEST_FILENAME}index.htm -f RewriteRule ^(.*)$ $1index.htm [L]
希望這可以幫助。
更新:升級到 Apache 2.4.10 為我解決了這個問題。
感謝Ondřej Surý,這可以在 Ubuntu 14.04 上使用 apt 輕鬆完成:
add-apt-repository ppa:ondrej/apache2 apt-get update apt-get install apache2
ps OP 確認這在 Apache 2.4.9 中也已修復。