2011-08-16 47 views
3

有沒有一種簡單的方法來防止服務器返回錯誤400(錯誤的請求)時,請求包含%符號的URL?如何在URL包含百分號符號時停止錯誤400? (Apache)

許多大型網站都有同樣的問題,例如:http://twitter.com/%http://bing.com/%

但其他網站有固定的這一點,並返回一個自定義錯誤頁,而不是,而不是標準的服務器響應,如:http://facebook.com/%http://google.com/%

是否有一種簡單的單一方法可以從返回400錯誤中轉義單個字符%符號,而是在Apache中使用mod_rewrite或類似方法使用自定義錯誤文檔返回404錯誤?

+0

你有沒有找到一個解決方案,允許%的url? – RichardW11

+0

不是。處理URL中%的最佳方式是執行@ arnaud576875所建議的操作。讓'錯誤400'頁面檢查服務器URL中的%,然後根據需要重定向到另一個頁面(或404頁面)。 – neave

回答

2

有從返回400錯誤逃生單個字符%符號的簡單,單一的方式

是的,你必須來urlencode你把一個URL,如果不期望他們的任何字符具有特殊的意義。

例如在PHP中:

$string = urlencode('%'); 

僅供參考%編碼爲%25https://twitter.com/%25

+1

這不是我正在尋找的。我知道可以使用PHP或其他方式逃避角色,但是我需要一種方法來防止在用戶錯誤地直接在URL中輸入%時出現400錯誤,例如:http://twitter.com/somepage% – neave

+0

單個'%'在URL中無效,這是一個糟糕的請求。服務器除了返回一個錯誤400 - 沒有其他選擇 - 錯誤的請求。你無法避免某人在他的URL欄中輸入任何內容。你可以做的最好的是改變錯誤400頁(可以是一個PHP腳本)。 – arnaud576875

+0

我也遇到了這個問題,第三方客戶端發送URL中包含%的值。是的,我知道他們沒有正確逃脫,不應該以這種方式將它們發送給我們,但我們如何處理這些URL(基本上我希望Apache在重新啓動服務器代碼之前正確地轉義URL) – Nick

0

我通過使兩件事情解決了這個。使用apache配置,我將這個錯誤指向了我的400.shtml文檔。第二件事是在我的.htaccess文件:

RewriteEngine On 
RewriteRule 400.shtml 404.shtml [L] 

你可以用這兩個播放和使用你的服務器端腳本來得到這個錯誤處理,而不是僅僅404.shtml。

乾杯。

相關問題