2010-02-02 38 views
1

我不知道這是一個Apache或PHP的事情,但如果你去到任何一個:如何停止解析爲文件時不存在的URL?

mysite.com/about 
mysite.com/about/ 

它會顯示mysite.com/about.php文件,而不是一個404錯誤,因爲該目錄不存在。

我相信這是一些設置,也許是一個htaccess的東西,任何想法?

回答

3

正如其他人已經回答,它可能是一個mod_rewrite規則;還有一個叫做MultiViews的指令明確地用於啓用你描述的功能。

http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews

多視圖的作用是作爲 如下:如果服務器接收用於/一些/目錄/ foo的一個 請求時,如果 /一些/目錄,使多視圖,和 /一些/ DIR /富不存在,那麼 服務器讀取尋找名爲foo 文件的目錄。*,有效 假貨一個類型的地圖,名稱的所有 這些文件,賦予它們同樣 媒體類型和內容編碼它如果客戶要求其中一個名稱爲 ,則會有個客戶。然後它選擇 與客戶的 要求的最佳匹配。

查找

Options MultiViews 
在httpd.conf或特定的虛擬主機,配置文件

+0

非常感謝這正是我一直在尋找! – fire 2010-02-02 14:26:23

+0

很高興幫助。 MultiViews對於一些人來說非常棒(防止大量使用.htaccess文件和mod_rewrite規則)以及其他人的禍害。 – meagar 2010-02-02 14:28:51

3

這不是默認行爲,所以很難說。如果這發生在Apache端,請查找一系列重寫匹配指令;他們可能會以RewriteCond開頭並以RewriteRule結尾。

如果您在VirtualHost配置文件或.htaccess配置文件中沒有看到類似的內容,那麼它將由您正在使用的任何PHP框架進行管理,而您需要在其中配置相應內容。

+1

+1這絕對不是一個默認的PHP/Apache的安裝。我懷疑一個'mod_rewrite'指令或一個模塊,可以建議替代文件名稱爲不完整的請求,我忘了它的名字... – 2010-02-02 14:06:47

0

這個的.htaccess可以解析,用$ _ SERVER [REQUEST_URI]在PHP端,完整的URL,然後執行所需的操作,這是一個普遍的方式,你應該考慮誤差控制和404重定向:

ErrorDocument 404 /404.php 
<IfModule mod_rewrite.c> 
RewriteEngine On 
# RewriteBase 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 
</IfModule> 

和int PHP的一面,這應該是本的index.php

$URLarray = explode('/', $_SERVER['REQUEST_URI']); 
+0

與問題無關 – meagar 2010-02-02 14:26:51