ささいな話です. Apache HTTP Server の設定において, Alias
と Location
のどちらが優先するか, という話です.
とりあえず, Apache HTTP Server と PHP-FPM とを先月の記事に書いたような感じで連携させ, PHP-FPM としては /xxx
に chroot していることを前提といたします.
ここで, Apache HTTP Server 側で, たとえば次のように設定したとします.
AliasMatch ^/zzz/(.*\.php)$ /zzz/$1 <LocationMatch ^/zzz/(.*\.php)$> ProxyPassMatch fcgi://127.0.0.1:9000/zzz/$1 <LocationMatch>
クライアント PC から /zzz/hello.php にアクセスすると, /xxx/zzz/hello.php
の内容が PHP のプロセッサーによって処理されたうえで返ってきます.
次に, Apache HTTP Server 側で, 次のように設定したとします.
<LocationMatch ^/zzz/(.*\.php)$> ProxyPassMatch fcgi://127.0.0.1:9000/zzz/$1 <LocationMatch> AliasMatch ^/zzz/(.*\.php)$ /zzz/$1
先ほどとは順番を変えただけです. この場合, クライアント PC から /zzz/hello.php にアクセスしても, やはり先ほどと同じように /xxx/zzz/hello.php
の内容が PHP のプロセッサーによって処理されたうえで返ってきます.
では, いっそのこと, 次のように設定したらどうなるでしょうか.
# <LocationMatch ^/zzz/(.*\.php)$> # ProxyPassMatch fcgi://127.0.0.1:9000/zzz/$1 # <LocationMatch> AliasMatch ^/zzz/(.*\.php)$ /zzz/$1
この場合, クライアント PC から /zzz/hello.php にアクセスしてみますと, 今度は /zzz/hello.php
の内容が返ってきます. したがって, 当然 PHP のプロセッサーによって処理されることもなく, そのまま返ってきます.
要するに, Alias
と Location
の間では, 設定ファイルへの記載順序にかかわらず, 常に Location
のほうが Alias
よりも優先するようです.
ちょっとしたコツをつかんだ気がして, 少し得意になっていましたところ, 何のことはない, オンラインドキュメントにしっかり書かれていました.
Note that you may need to specify additional
<Directory>
sections which cover the destination of aliases. Aliasing occurs before<Directory>
sections are checked, so only the destination of aliases are affected. (Note however<Location>
sections are run through once before aliases are performed, so they will apply.)
括弧の中に書かれた部分に注目です. つまり, Alias
は Location
よりは後に適用される, ということです.
勉強になりました.
No comments:
Post a Comment