私はPOSTを介して入力を受け取り、/search/<search string>/
にリダイレクトする検索ページを持つDjangoプロジェクトを持っており、このページは結果をレンダリングします。テストではワイルドカードとしてパーセント記号(%)が使用されています(tes%erはtestuser、testerなどを返し、URLは次のようになります:example.com/search/tes%25er/
)、すべてがDjango開発サーバーで正常に動作します。手動でurlにtes%erを書き込むと、自動的にtes%25erに変更されます。ApacheでURLの%のエスケープを正しく修正しました
私はmod_wsgiでApacheサーバーにデプロイしています。検索ページがexample.com/search/tes%er/
にリダイレクトされると、サーバーエラー:Bad Request. Your browser sent a request that this server could not understand.
が発生します。私が手動でURLに「25」を追加すると、エンコードされた%記号のようになり、開発サーバーのように見えます。
%-signを自動的にエスケープして動作するURLを作成する方法、%エスケープされていないURLを作成する方法、またはURLを作成する検索ページで醜いハッキングをする必要がありますか? (私はむしろ、このような醜いハッキングをしないでください。ユーザーは手動で%をURLに追加して動作させることはできません)。
:検索ページから検索URLにクエリを送信するコード。
if form.is_valid():
if 'search_user' in request.POST:
q = request.POST['search_user']
return redirect('/search/'+q)
なぜ最初に無効なURLにリダイレクトしていますか? –
@ IgnacioVazquez-Abrams:開発サーバーが自動的にURLをエスケープすることができたので、私はApacheも同様だと考えました。 – olofom
@ IgnacioVazquez-Abrams:確かに 'q = request.POST ['search_user']。replace( '%'、 '%25')'はうまくいきますが、とにかくApacheと一緒にやっています。出来ますか? – olofom