2013-07-01 48 views
1

我已經創建了一個錯誤代碼404的動態頁面。我怎樣才能在app.yml中設置相同的?谷歌應用程序引擎 - 爲PHP設置404頁面

我嘗試在app.yml中設置錯誤處理程序,但它不起作用。

error_handlers: 
- error_code: 404 
    file: page404.php 

它不斷給:

The url <wrong url> does not match any handlers. 

回答

0

有幾件事要注意。

您不必使用錯誤處理程序來處理404,並且沒有特定的404錯誤處理程序。只有以下error_handler類型

默認的處理程序和

over_quota,這表明該應用程序已超過資源配額; dos_api_denial,將其提供給由您的應用程序的DoS保護配置阻止的任何客戶端; 超時時間,如果在您的應用程序收到響應之前達到了截止日期,則會提供服務。

見文檔https://developers.google.com/appengine/docs/php/config/appconfig#Custom_Error_Responses

另外一個自定義的錯誤處理程序,不會令他們需要的是靜態的HTML PHP腳本,所以如果你想你的404響應頁面運行PHP,那麼你需要使用一個正常的處理程序,捕獲任何不符合你的處理程序的東西,根據其他答案。

3

得到了解決:

添加低於app.yml結束設置。檢查完所有格式後,它將匹配下面的模式並拋出404錯誤頁面。

- url: /.* 
    script: page404.php 
+0

這可能看起來很簡單(也許是Google決定爲HTTP錯誤代碼提供實際的自定義錯誤處理函數**的唯一方法),但這種方法存在一些注意事項。 *首先,*這實際上並沒有發現404錯誤。它只是一個回退處理程序,用於在**之前不匹配處理程序**的任何URL。 *其次,*您必須記得在'page404.php'頁面中使用['http_response_code()'](http://php.net/manual/en/function.http-response-code.php)來設置HTTP響應代碼正確(服務頁面時) - 如果這很重要(請參閱第4點)。 – ADTC

+0

*第三,*每個請求只使用一個處理程序,所以如果你有通配符的處理程序,當基於通配符的URL不生成時,需要通過代碼將目標PHP文件重定向到404頁*有效的迴應。 *第四,*如果某些瀏覽器沒有達到某些標準,它們傾向於忽略提供的頁面(響應代碼不是200)。 IE的某些版本因此而臭名昭着,忽略了它猜測*是服務器無意義的轉儲,而是顯示「友好的」錯誤消息。我想你可以通過忽略點2並將其作爲HTTP 200來解決它。 – ADTC