タグ付けされた質問 「querystring」

1
Apache mod_rewriteはリダイレクト時にクエリ文字列をダブルエンコードします
クエリ文字列を渡す際のApache mod_rewriteの動作に関する奇妙な問題(おそらくバグ?)に遭遇しました。 再現するために、デフォルトのApache構成でクリーンなUbuntu(oneiric)インストールをセットアップしました。mod_rewriteを有効にし、デフォルトのサイト構成で次を追加しました。 RewriteEngine on RewriteRule ^/(.*)$ /r/$1 [R] テストするには、curlを使用します。 curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b' 関連する出力は次のとおりです。 HTTP/1.1 302 Found Server: Apache/2.2.20 (Ubuntu) Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b ご覧のとおり、クエリ文字列は二重エスケープされていますが、これは間違っています。これを修正する方法はありますか?私たちが試したいくつかのこと: [NE]を追加します。これにより正しいクエリ文字列が得られますが、パスはエスケープされず、新しい問題につながります。 [NE、B]を追加します。これは機能しているように見えますが、パスのとの/間の部分がエスケープされます。ab クエリ文字列を手動でエスケープ解除します。 RewriteCond %{QUERY_STRING} .* RewriteMap unescape int:unescape RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}} ただし、これは、たとえば、クエリ文字列で&エスケープさ&れたan とエスケープされた文字を区別できないことを意味します。 更新: このバグレポートでは、同じ問題について説明しています。最初のコメントは明らかに問題を修正するコミットにリンクしていますが、Pieterが以下で述べているように、実際に修正されているようには見えません。

4
パラメータの長さが255を超える書き換えられたURLは機能しません
mod_rewriteを使用して、次のようにURLを書き換えています。 http://example.com/1,2,3,4/foo/ .htaccessでこれを行うことにより: RewriteEngine On RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA] 「1,2,3,4」が255文字より長い文字列に変わる場合を除き、Apacheは「403 Forbidden」を返します。 foo.php?id=1,2,3,4非常に長いid文字列であっても、直接アクセスするのに問題はありませんが、これは私にとって選択肢ではありません。 調整すべきApacheやその他の設定はありますか? 更新:RewriteLogLevel 9でRewriteLogをオンにしました。短いID文字列では、ログファイルに複数の行が記録されます。しかし、id文字列が255文字を超える場合、何もログに記録されません(mod_rewriteが実行されていないようです?)。 この質問がおもしろい/役に立つと思ったら、賛成してください。

2
Nginx Rewrite Convert querystring to Path
この単純な書き換えルールが好きです: /somefolder/mypage.aspx?myid=4343&tab=overview リダイレクト先: /folder/4343/overview/ いくつかの解決策を探しましたが、実際に機能するものはありませんでした。 私は試した: rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$ /folder/$1/overview permanent; そして rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$ /folder/$1/overview permanent; 私は何を間違えていますか?404を取得しています (より単純なルールで問題なく動作します。) ありがとう
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.