2011-10-05 69 views
1

我正在使用WAMP服務器,大部分配置爲開箱即用。我無法讓mod_rewrite在本地運行(在生產服務器上一切正常)。如何防止Apache/mod_rewrite將路徑視爲具有相同名稱的文件

我有位於PHP文件: /ajax/graphs/get-graph.php

方式本文件通常是調用經由 /index.php

我有一個.htaccess文件在根與下列加載的引導文件規則:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php [L] 

所以,基本上,當通過AJAX我的應用請求/ajax/graphs/get-graph/呼叫應當引導至/index.php

問題是,Apache/mod_rewrite會看到請求路徑並直接加載/ajax/graphs/get-graph.php

如何防止Apache假設/ajax/graphs/get-graph/是一個有效的文件,因爲在該位置存在一個同名的php文件?

回答

3

這聽起來像你已經陷入了內容協商的陷阱;-)正如the Apache documentation解釋,有一個選項叫MultiViews。啓動時,導致Apache基本不存在轉換的目錄名稱到其相應的文件名。

多視圖的效果如下:如果服務器收到一個請求/some/dir/foo,如果/some/dir啓用了多視圖,並/some/dir/foo不存在,則服務器會尋找一個名爲foo.*文件的目錄,並有效假貨一個類型映射其名稱所有這些文件...

這樣做的目的是,你可以在不同的格式或語言文件的多個版本,像

/some/dir 
- foo.en.gif 
- foo.en.png 
- foo.en.jpg 
- foo.fr.gif 
- foo.fr.png 
- foo.fr.jpg 

和Apache將根據瀏覽器提供的偏好選擇最好的一個。

爲了解決這個問題,你應該需要做的就是添加指令

Options -MultiViews 

對應於/ajax/graphs一個<Directory><Location>塊。或者,如果您無法訪問主服務器配置,則可以將其放入/ajax/graphs/.htaccess

+0

像冠軍一樣工作!謝謝! –

+0

謝謝,解決了我2-3小時的神祕感。 –

相關問題