
前提
LinuxはCentOS 5.3に標準で入っているApache 2.2.3
Windowsはxampp 1.7.2のApache 2.2.12
アクセス先 http://example.com/fixed/variable/foo
DocumentRoot /sites
AliasMatch ^/fixed/([^/]*)/(.*) "/sites/$1/fixed/$2"
実際にアクセスするスクリプト /sites/variable/web/index.php
結果
LinuxのSCRIPT_NAME /fixed/variable/foo/index.php
WindowsのSCRIPT_NAME /variable/web/index.php
AliasMatchをAliasに変えても同じ。
mod_rewriteをOffにするとLinuxと一緒の挙動になる。ひどい。
そして、REQUEST_URIはなぜかhttpから始まる完全な書式になる。
LinuxのREQUEST_URI /fixed/variable/foo
WindowsのREQUEST_URI http://example.com/fixed/variable/foo
さらに、DocumentRoot を実際にアクセスするスクリプトの親ディレクトリではない場所にすると、
404エラーが返るようになる。
「xamppで開発する奴が悪い」とか言われそうだけど、他にハマってる人いないんだろうか。。
symfonyはSCRIPT_NAMEを利用してrelativeUrlRootを決めているので、常にOops!と言われてしまう。
2009-07-20 19:33:40
Apache
Comments: 0
引き続きApacheのhttpd.confのお話。
Alias /hoge /foo/bar/baz/hoge
なんてのを、どのユーザディレクトリ直下にあるhogeにも適応させたいがために、
AliasMatch ^/([^/]*)/hoge /foo/bar/baz/hoge
と書き直すと、なぜか動かなくなる。
正しくは、完全一致するように、
AliasMatch ^/([^/]*)/hoge/(.*)$ /foo/bar/baz/hoge/$2
などと書かないといけないのであった。
2009-07-19 20:12:01
Apache
Comments: 0
パフォーマンス稼ぎと一元管理のために、httpd.confにRewriteRuleを書こうとしてはまった。
.htaccessに書かれたRewriteRuleが解釈するパスは、自分自身からの相対パスだが、
httpd.confに書かれたRewriteRuleが解釈するパスは、絶対パスとして扱われるらしい。
その結果、たとえば「ドキュメントルート直下のindex.phpに引き渡す」という記述が相対パスでは書けないため、
UserDirとかVirtualDocumentRootとRewriteRuleを併用するとハマる。ここではRewriteBaseも使えない。
仕方がないので.htaccessを読み込むように設定するしか無さそうだ。
他ディストリビューションと比べてデフォルト設定がやや制限気味なので注意する。
KeepAliveがOffになっているので、使うときはOnにする。
これをしないとアクセスされるたびにapacheのプロセスが沢山立ち上がってかなり憂鬱な事になる。
AllowOverrideがNoneになっているので、これをAllにする。
あと忘れがちなのが、ブラウザでアクセスすると403が返ってくる時は、
ドキュメントルートのあるDirectoryに対してAllow from allを追加する。
AllowOverrideの値については、
BASIC認証とかを使いたければ AuthConfig
mod_rewriteとかを使いたければFileInfo
DirectoryIndexとかを使いたければIndexes
Allowとかを使いたければLimit
なので、きっと全部使いたいと思うので、基本的にAllを指定して良いはず。
その他のコツとしては、VirtualHostは最初に1つダミーの定義をしておくと良い。
この定義が、他のすべての定義に引っかからなかった場合の既定の動作になる。
あと、はまりどころとしては、UserDirのワイルドカードは*だけど、
VirtualDocumentRootのサブドメイン名は%1で示す。混同すると変なところを読みに行くので注意。
1
4 件中 1 ~ 4 件目