2009-11-03 36 views
4

我想採取丟失的文件請求特定文件夾中,並將其重定向到該文件夾​​中program.php如何使用errordocument重定向到同一個文件夾中的php文件?

這是一個程序,我將用很多不同的地方,我寧願避免在htaccess的文件中指定文件夾的名稱。

我曾嘗試只是把:

errordocument 404 program.php

但結果是,瀏覽器只是打印出「program.php」和不執行program.php。

我明白爲什麼發生這種情況:根據在http://httpd.apache.org/docs/2.0/mod/core.html文件上的URL不以斜線或http開頭被解釋爲一個文本消息。

的問題是如何解決這個限制能夠訪問同一個文件夾。

回答

3

我最終使用重寫規則代替的ErrorDocument

 
rewriteengine on 
rewritecond %{request_filename} !-f 
rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L] 

第二行驗證該文件不存在,從而使現有的圖像將被正確地顯示。

+0

問題在於它不會返回404狀態碼,所以搜索引擎和鏈接檢查工具等。將不知道他們已經到達了不應該存在的頁面。 – rjmunro 2009-11-03 18:16:59

+0

這很容易在「&sendHeader = 404」設置的樣式下在program.php中解決。 – 2009-11-03 18:43:25

+0

請注意,您的網絡服務器不會將此解決方案記錄爲404。 – Gumbo 2009-11-03 21:14:01

0

您已經嘗試了(相對或絕對)路徑? 如果你認爲它是相對的,它應該是web根目錄,它可能服務於你的目的。

ErrorDocument 404 /program.php 
+0

請參閱我的評論爲其他答案。 – 2009-11-03 17:51:33

2

你想:

ErrorDocument 404 /program.php 

按照docs 「URL可以與本地網絡路徑(相對於DocumentRoot的)一個斜槓(/)開頭。」

+1

使用/program.php將不起作用,因爲程序位於/somefolder/program.php中,我無法預測「somefolder」的名稱。 .htaccess文件與program.php一起位於「somefolder」中。 – 2009-11-03 17:35:52

0

如果只有少量的文件夾,你也許可以使用:

<Directory /path/a> 
    ErrorDocument 404 /a/program.php 
</Directory> 
<Directory /path/b> 
    ErrorDocument 404 /b/program.php 
</Directory> 
<Directory /path/c> 
    ErrorDocument 404 /c/program.php 
</Directory> 

如果這是不切實際的,那麼你應該只有一個program.php根,並將它取決於有不同的反應REDIRECT_URL環境變量的內容,即php中的$ _SERVER ['REDIRECT_URL']。

0

爲什麼不能有一個ErrorDocument的處理中的所有文件夾中的所有錯誤?這種方式可能會更清潔。如果我沒有記錯的話,你可以使用$ _SERVER [「REQUEST_URI」]來處理個案。

+0

問題是這是一個我想在很多地方使用的程序,而且我不想每次都修改整個站點的結構。我真的想讓它在一個獨立的文件夾中工作,而不會影響到外面的東西。 – 2009-11-03 20:08:55

0

這個怎麼樣。在你的根路徑中,你設置了一個通用的error.php文件。然而,它所做的只是解析REQUEST_URI,檢查路徑,看看那裏是否有自定義的error.php,幷包含它。可以工作嗎?

相關問題