2012-03-25 60 views
3

當我嘗試使用我的Apache服務器上的.htaccess文件從我的所有文件中刪除我的PHP擴展時,一切正常。擴展名被刪除了,一切看起來都好多了。Mod_Rewrite擴展刪除更改功能404

但是,我遇到了一個小問題:當我通常會轉到諸如./nonexistent.php之類的頁面時,我會收到404錯誤。但是,當我重寫我的網址時,我轉到./nonexistent,而是收到500 Internal Server Error

理想情況下,我想簡單地將用戶重定向到自定義的「找不到頁面」頁面,但目前我無法找到一種方法來執行此操作。

下面是我使用的代碼:

Options -MultiViews 

RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ $1.php 

我試過設置:ErrorDocument 500 /nope然而,這似乎不有效果無論是。

因此,總結一下,有沒有人知道如何重寫擴展,同時保持默認的「Page Not Found」系統的功能不變?

回答

2

當您使用上述重寫條件請求不存在的文件,你正在運行到無限的重定向。

如果訪問http://yoursite.com/i-dont-exist,第一個條件評估爲真,i-dont-exist是一個不存在的文件,因此它會嘗試重寫i-dont-exist.php這也並不存在這樣的重寫格局一直持續到Apache的限制遞歸,給你一個500錯誤(主要是它不斷,直到你遇到500錯誤改寫爲i-dont-exist.php.php.php.php.php...php

您可以通過添加額外的檢查,以確保與.php擴展名的文件改寫前存在解決這個問題。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f #make sure $1.php exists before rewriting 
RewriteRule ^(.*)$ $1.php 

如果file.php存在,那麼它將重寫爲它,否則它將不會,並且404錯誤頁將被提供。

+0

drew010,你是對的,另一個答案是實用的,因爲它解決了我的問題,但實際上並沒有解決它。 – elliottbolzan 2012-03-25 22:13:21

+0

如果你檢查你的Apache'error_log',你會看到500錯誤的確切原因。如果您的網站非常繁忙,那麼您將會寫入很多錯誤日誌,並使其不必要地增長,從而難以發現和調試實際錯誤。看看這是否也有幫助。 – drew010 2012-03-25 22:14:39

+0

感謝您的幫助,非常感謝。 – elliottbolzan 2012-03-25 22:15:07