2011-09-16 38 views
3

在我的本地開發機器上,我下載了運行在Windows 7上的包含Apache 2.2.16和PHP 5.3.5的PDT + Zend Server。在本地站點上,我包含了一個.htaccess,其中包含404,403和403的ErrorDocuments。和500.在我的PHP中,當用戶請求一個不存在的文檔時,我使用頭(「Http/1.0 404 Not Found」)。在我的本地服務器上,一切都很好。我的自定義ErrorDocument出現,我很高興。從PHP返回Http狀態代碼到Apache?

我把所有東西上傳到我在Linux服務器上運行Apache 2.2.38和PHP 5.3.8的共享主機上,並且突然間ErrorDocuments只有在它們不是來自PHP。

在PHP.ini或httpd.conf或.htaccess中是否有一些設置允許Apace從PHP中查看錯誤代碼,這使得我的dev服務器正常工作,但不是我的共享主機?

在研究這件事時,我所看到的只是「Apache一旦傳遞給PHP就看不到狀態碼。」在這種情況下,爲什麼我的開發服務器正常工作?

編輯

爲了清楚起見,這裏的的.htaccess:

# Use PHP 5.3 
Action application/x-hg-php53 /cgi-sys/php53 
AddHandler application/x-hg-php53 .php 

#Deny Include Files 
<Files *.inc> 
order deny,allow 
deny from all 
</files> 

#Provide custom error documents 
ErrorDocument 404 /Errors/Http404.php 
ErrorDocument 403 /Errors/Http403.php 
ErrorDocument 500 /Errors/Http500.php 

,因爲如果用戶導航到myhost.com/jdkslfjdls用戶收到錯誤的內容工作的的.htaccess /Http404.php。

但是,如果用戶導航到myhost.com/images/GetImage.php?Id=5(當沒有圖像#5時),則用戶不會收到任何內容。

如果他們導航到(內部IP地址)/images/GetImage.php?Id=5,用戶將收到錯誤/ Http404.php的內容。

如果用戶嘗試訪問GetImage.php?Id = 6(當存在圖像#6但他們沒有權限時),則會出現類似問題。在共享服務器上,他們得到一個空白頁或瀏覽器的403錯誤。在我的開發服務器上,他們得到我實際的自定義403錯誤頁面。

再次,如果我嘗試訪問.inc文件,403錯誤文檔在共享服務器上工作。

+0

自定義錯誤文檔位於何處?它需要通過Linux服務器可達,所以如果它只在你的Windows服務器上,那麼它爲什麼不顯示它 – thegaffney

+0

它顯示當我嘗試導航到一個不存在的文件,例如http://myhost.com/ hfjdshfkdsh。它只會在我使用php的頭文件時失敗。 –

+0

你在哪裏放頭(「Http/1.0 404 Not Found」)?在一個存在但你想要它拋出一個404代碼的文件? – thegaffney

回答

0

您確定服務器上使用了.htaccess文件嗎?有時託管公司不允許全局apache設置被本地.htaccess文件覆蓋。

不過,若你有機會獲得你的虛擬主機配置比你可能想看看下面的指令

AllowOverride All 

相反,如果你發現

AllowOverride None 

嘗試如上改變。

+0

.htaccess正在使用中,因爲如果我導航到myhost.com/fkjdshfkds,我會得到正確的自定義404文檔。當我嘗試使用PHP頭文件(「Http/1.0 404 Not Found」)或其他狀態代碼時,這只是一個問題,它可以在我的Windows服務器上運行,但不在共享主機上運行。 –

+0

你可以做一個快速的黑客從PHP重定向到一個不存在的頁面並獲取文檔? :P我知道這不能提供解決方案,但如果您真的需要它並運行它可能會幫助你一段時間。 –

+0

我目前的攻擊是爲了避免出現一個錯誤圖像,上面寫着「您需要權限」或「圖像未找到」。但是,使用標題重定向是個好主意。 –

0

檢查,如果你在你的Apache有

AllowOverride ALL 

。在虛擬主機裏面對應到您的網站

反正Directory指令,這可能是一個可能的原因conf下,其他的可能是檢查你是否已經啓用了mod_rewrite

在Ubuntu或基於Debian的系統,你'd只需將/etc/apache2/mods-available/mod_rewrite.load中的mod_rewrite.load鏈接或複製到/etc/apache2/mods-enabled/mod_rewrite.load

雖然重寫應該沒有任何關係,但我已經看到你的.htaccess指令可能需要mod_rewrite

所以檢查那些在Apache配置文件中的東西。 如果沒有發生任何事情聯繫我@ [email protected]

希望它的作品。

+0

我現在用「RewriteEngine On」試過了,但沒有改變。 –