2012-06-03 123 views
3

有一個現有的網站與一個平面文件結構與查詢字符串豐富的網址萬噸。我的問題是我寫的一個CMS和已經安裝使用查詢字符串像一個自定義錯誤代碼頁:htaccess與查詢字符串問題

的ErrorDocument 404 /error.php?errorcode=404

與此問題是,如果舊的損壞的url有一個查詢字符串,這會覆蓋errordocument redirct中的查詢字符串。例如,如果你這樣做

www.example.com/missingpage.php - 這將工作,並重定向到404沒有問題。

但是,如果你

www.example.com/missingpage.php?anything=anything

甚至

www.example.com/missingpage .PHP?

errorcode = 404查詢字符串將不會使其到PHP頁面,它會拋出錯誤代碼不匹配時設置的通用消息。問題是存在很多很多與各種瘋狂查詢字符串的鏈接,所以很難單獨過濾它們。

有沒有人遇到過這個問題?

回答

0

簡單的解決方案,製作一個特定的404.PHP頁面。我的項目中有一個完整的目錄,用於所有這些自定義錯誤頁面。

+0

我試圖避免這種情況,因爲我想使用CMS的現有代碼庫來允許通過它編輯代碼。很明顯,我可以從每個錯誤頁面的數據庫中讀取數據,並創建一個控件來編輯這些記錄,但那就是更多的頁面和代碼。我儘量減少文件,因爲它增加了代碼維護的道路。希望有人遇到過這種情況,並會看到這一點。不過謝謝。 –

0

我發現了另一個選項,儘管它不是100%理想的。如果您在錯誤文檔定義中使用完整的URL,它將執行重定向並忽略原始URL查詢字符串。例如,如果你這樣做:

的ErrorDocument /error.php?error=404

不良URL,它用來訪問頁面的用戶將保持在地址欄和您的查詢字符串會被地址欄中的任何內容覆蓋。但如果你

的ErrorDocument http://www.google.com/error.php?error=404

然後會發生重定向和原來的「壞」 URL中使用將與錯誤文件一個被替換的用戶。

這是您必須知道的警告。這是一個軟404錯誤,所以搜索引擎可能會討厭你的膽量。

3

你可以做的其他事情是使用mod_rewrite並追加查詢字符串。我之前在其他設置中看到過這樣做,因爲ErrorDocument目標通過URL映射引擎放回(至少在apache 2.4中)。

例如:

ErrorDocument 404 /error-doc-404 
ErrorDocument 405 /error-doc-405 
ErrorDocument 500 /error-doc-500 

然後你有這樣的:

RewriteEngine On 
RewriteRule ^error-doc-([0-9]{3})$ /error.php?errorcode=$1 [L] 

通過這種方式,地址欄上的網址不會得到改變。