2011-08-16 2 views
3

パーセント記号を含むURLが要求されたときにサーバーがエラー400(不正な要求)を返すのを防ぐ簡単な方法はありますか?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エラーを返すから、単一の文字%記号をエスケープするための簡単な、単一方法はあり

はい、あなたは彼らが期待されていない場合は、URLに置かれた任意の文字をURLENCODEする必要が特別な意味を持つ。 PHPで例えば

$string = urlencode('%'); 

FYI %%25としてエンコードされます。https://twitter.com/%25

+1

これは私が探しているものではありません。私はそれがPHPなどを使用して文字をエスケープすることができることを知っていますが、私は400エラーを防ぐために、このようなURLに間違ってURLを直接入力すると、方法:http://twitter.com/somepage% – neave

+0

単一の '%'がURLで有効でない場合、これは悪い要求です。サーバーは、エラー400を返す以外の選択肢はありません - 悪い要求。あなたのURLバーに何かを入力することを避けることはできません。あなたができることは、エラー400ページ(これはPHPスクリプトになり得る)を変更することです。 – arnaud576875

+0

私はこの問題にも取り組んでいます。サードパーティのクライアントは、%でURLを送信しています。はい、私は彼らが適切にエスケープされていないと、そのように私たちにそれらを送信する必要はありません知っているが、とにかく私たちはとにかく(私はサーバーコードにヒットする前に適切なエスケープとApacheをURLを書き換えたいと思います – Nick

0

私は二つのことをすることによって、これを解決しました。 Apacheの設定を使用して私はこのエラーを私の400.shtmlドキュメントに向けました。 2つ目は、私の.htaccessファイルにあった:

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

あなたはそれらの2と遊ぶとだけではなく、404.shtml取り扱わこのエラーを取得するには、あなたのサーバーサイドスクリプトを使用することができます。

乾杯。

関連する問題