1

したがって、明らかにApacheのドキュメントから、NEフラグの次の説明が表示されます: https://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne

デフォルトでは、たとえば & や ? などの特殊文字は、同等の 16 進数に変換されます。[NE] フラグを使用すると、それを防ぐことができます。

RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]

上記の例では、/anchor/xyz を /bigpage.html#xyz にリダイレクトします。[NE] を省略すると、# が 16 進数の同等の %23 に変換され、404 Not Found エラー状態になります。

ただし、次のように RewriteRule を単純に配置する例をたくさん見てきました。

RewriteRule ^(.*)$ http://www.mydomain.com/?foo=bar&jee=lee [L,R]

そして、リダイレクト後にサーバーに送信された最終的なリクエストを調べると、URI エンコーディングのない、これと同じプレーンな文字列です。さらに実験すると、ソース文字列のクエリ文字列部分に特殊文字が含まれている場合、mod_rewrite 内でのみ uri エンコーディングが発生するようです。たとえば、ソースは originaldomain.com/?foo%5d=6 です。

次に mod_rewrite は、NE が指定されていない場合、"%" を "%25" にエンコードして mydomain.com/?foo%255d=6 に書き換えようとします。ただし、「?」を省略した場合は注意してください。私の元のリクエストでは、エンコードは行われません。

そのため、この概念を完全に間違った方法で理解していない限り、ほとんどのサイトやドキュメントで説明されていることについて混乱しています。

また、ブラウザと mod_rewrite が特定の文字をエンコードするかどうかを決定するために使用する経験則とは何か、一般的に知りたいと思います。ブラウザは、ブラウザに入力されているものを送信するのが難しい場合や意味がない場合を除き、何もエンコードしない傾向があるように思えますが、それは正しいですか? また、プロセス全体で、ブラウザにドメインを入力して実際にページをレンダリングするために、すべてのエンコーディングとデコーディングがいつどこで行われるかについて、誰かが完全なワークフローを提供できれば本当に素晴らしいでしょう?

4

1 に答える 1