2013-03-25 67 views
2

這很奇怪:我的Apache配置爲DirectoryIndex index.html,index.php,所以當我輸入http://gustavopi-macmini.local/時,它搜索index.php,並在文件中只有html標記時加載它。Apache不會自動執行index.php的腳本

但是,如果我在index.php中放了一些php腳本,它會加載index.html.en(It Works!)。但是,如果我輸入http://gustavopi-macmini.local/index.php,它將加載並執行腳本。

另外,如果我把一個index.php文件中的一個子目錄,並http://gustavopi-macmini.local/somesubdirectory/型IT負載,通常執行index.php,因爲它應該...

爲什麼這種奇怪的根從PHP腳本「跳」發生的行爲?

回答

10

定義的「目錄索引」文件的訂單也決定了它們的優先級。

在這種情況下,如果同時存在index.htmlindex.php,Apache將選擇index.html

要改變這個,改變'目錄索引'文件的順序;

DirectoryIndex index.php index.html 

在這裏閱讀文檔:

http://httpd.apache.org/docs/2.2/mod/mod_dir.html

+0

它不會影響問題,Apache加載php如果裏面沒有php代碼。無論如何,我嘗試過,但沒有奏效。 – Gustavo 2013-03-25 23:23:41

+0

Apache加載'index.html.en'是由'Content Negotiation'模塊[文檔](http://httpd.apache.org/docs/2.2/content-negotiation.html)引起的,如果你不需要,你可以禁用它。 – thaJeztah 2013-03-25 23:27:54

+0

該模塊不能被禁用,Apache停止工作。然而,今天早上(在一杯好咖啡後),我在index.php index.html之間的DirectoryIndex中看到了一個「,」。刪除它可以解決問題。我認爲這個指令被語法錯誤忽略,所以Content Negotiation處理尋找index.html或index.html.en導致奇怪的情況。 – Gustavo 2013-03-26 14:03:56

0

不要的index.html的index.php並且因爲它是由 「thaJeztah說:」 放之間的逗號(,)指令DirectoryIndex中的順序很重要,它定義了在請求的目錄中存在兩個文件index.html和index.php時將提供的文件:

如果你想優先考慮的index.html寫:

的DirectoryIndex index.html的index.php文件

如果你想優先的index.php寫:

DirectoryIndex index.php index.html