SetEnvIf(Apache2、.htaccessファイル経由)を使用して、変数に割り当てる値にスペースを含める必要がある環境変数を保存しようとしています。たとえば、環境変数「AUTH_KEY」を値「ab」に設定しようとすると、次のようになります。
SetEnvIf Request_URI "^/example" AUTH_KEY="a\ b"
何をしても、値のスペースをエスケープできませんでした。スペースは、作成されるenv変数間の区切り文字として機能します(上記では、AUTH_KEYは値 '"a \'と2番目のenv変数で作成されます) 'b "'と呼ばれるように作成されます)。私も一重引用符を試しましたが、運がありませんでした。
スペース文字をエスケープするにはどうすればよいですか?
結局、私はそれを自分で理解しました…
SetEnvIf Request_URI "^/example" "AUTH_KEY=a b"
…奇妙に見えますが、機能します。 AUTH_KEYを値a b
に正しく設定します
うまくいけば、これは将来誰か他の人の時間を節約するかもしれません。
詳細:-私はCプログラマーではありませんが、Googleでぶらぶらしていると、mod_setenvif.cが http:// www .bvbcode.com/code/s6148jvr-385031
関数は405行目で呼び出されます(ap_getword_conf
、詳細は http://docstore.mik.ua/orelly/Apache_mod/155.htm )で、文字列を解析しているようです。 、空白で区切られます(ただし、オプションで引用符で囲まれ、エスケープ文字の使用を受け入れます)。
これは、上記の関数によって返される部分文字列が「=」文字で分割される前に発生したことに気付きました(411行目、関数ap_getwordによる)。したがって、値だけでなく、key=value
ペアを引用符で囲みます。
代わりにSetEnvIf Request_URI "^/example" AUTH_KEY="a\sb"
を使用してみてください。ここでの\ sはスペースを表します。