web-dev-qa-db-ja.com

ApacheSetEnvIf値のスペースをエスケープする方法

SetEnvIf(Apache2、.htaccessファイル経由)を使用して、変数に割り当てる値にスペースを含める必要がある環境変数を保存しようとしています。たとえば、環境変数「AUTH_KEY」を値「ab」に設定しようとすると、次のようになります。

SetEnvIf Request_URI "^/example" AUTH_KEY="a\ b"

何をしても、値のスペースをエスケープできませんでした。スペースは、作成されるenv変数間の区切り文字として機能します(上記では、AUTH_KEYは値 '"a \'と2番目のenv変数で作成されます) 'b "'と呼ばれるように作成されます)。私も一重引用符を試しましたが、運がありませんでした。

スペース文字をエスケープするにはどうすればよいですか?

5
Alex 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ペアを引用符で囲みます。

5
Alex B

代わりにSetEnvIf Request_URI "^/example" AUTH_KEY="a\sb"を使用してみてください。ここでの\ sはスペースを表します。

1