開発環境の話 ApacheのAliasとRewriteで困る
まずは開発環境を作らねばということで一番シンプルに。Windows上に直接Apache入れてサーバーを起動してみた。
そこまでは良かった。
以下、悩んでしまったところのメモ
通常のDocument Rootとは別に、テストコードを色々試すフォルダを用意したい。
確かエイリアス?リダイレクト?が出来るはずというところからスタート
やりたいこと
- Localhost/sandboxというURLでDocumentRoot外のディレクトリに飛ばす
- Localhost/sandboxへのリクエストにはトップページ(index.php)を表示する
つまり、Alias設定以下+Rewriteさせるのってどうやるの?という問題
設定したこと
.htaccessを使わずにhttpd.confに追記
Alias /sandbox "/soucre/sandbox" #2 Alias "Sourceパス"
<Directory "/source/sandbox">
AllowOverride None #htaccess使うならAllとか
Require all granted #apatcheにフォルダへの権限付与
RewriteEngine On #3 RewrieModuleのオン
RewriteBase /sandbox #4 rewriteを相対で指定する際の基準となるパス *3
RewriteRule ^\/?$ /test/index.php #5 URLのマッチパターン 置換内容
</Directory>
※DocumentRootは /wwww/htmlとか全く違う場所
Aliasの設定
- Alias用のモジュールを有効化 対象の行のコメントアウトを外す
LoadModule alias_module modules/mod_alias.so
- Aliasにマッピングするディレクトリは絶対パス。DocumentRoot以下なら相対でもいける?
<Directory>ディレクティブに示すパスはAlias名でも良いとあったが、上手くいかなかったのでこちらも絶対パスで指定
Rewriteの設定
-
"RewiteEngine On"はhttpd.conf内のModuleをコメントアウトしておけば不要かと思ったけど一応記載
LoadModule rewrite_module modules/mod_rewrite.so
-
ReriteBase
こいつが一番厄介だった。Rewrite先の基準パスってことだけど、どう書けばよいのか。
通常はURLの示すディレクトリパス(.htaccess基準なら/で解決)なんだけども。ここに示す基準パスってのは最終的なRewriteにくっつくURLのことみたい。
なので今回はAliasで読み替えた後のパス名で記載が必要だった。
URL: localhost/sandbox → Source: /source/sandbox なら
URL: localhost:sandbox/index.php/ → Source: /source/sandbox/index.php/ となる
-
メインのRewriteRule
RewriteRule マッチさせるURL 置き換えるURL
RewriteCondもあるらしいけど今回は/sandbox=index.phpに紐づけたいだけなので不要
厄介ポイントとして、.htaccessとconfでマッチする開始位置が違うとか
.htaccess → RewriteRuleに「index.html」が渡される
httpd.conf → RewriteRuleに「/index.html」が渡される
"/"があるか無いかの違いになるようなので、"/?"で誤魔化した。
こんな感じでhttpd.confを編集、Apacheを再起動してlocalhost/sandboxにアクセス。
理想通りにlocalhost/sandbox/のまま"index.php"の内容が表示されました。
これでようやくテストスペースができた。というお話。
参考
用語の意味
Alias:リクエストされた特定のURLに対して(DocumentRoot以外の)任意のリソースフォルダにマッピングすること。
ReWrite:リクエストされてサーバーが受け取ったURLに対して、任意のURLに読み替える。Apacheでは正規表現でURLをマッチさせて置換する形
Redirect:いわゆる引っ越し先へのリダイレクト。URL自体が変換されて返される
Discussion