😺

開発環境の話 ApacheのAliasとRewriteで困る

2022/03/16に公開約2,200字

まずは開発環境を作らねばということで一番シンプルに。Windows上に直接Apache入れてサーバーを起動してみた。

そこまでは良かった。
以下、悩んでしまったところのメモ

通常のDocument Rootとは別に、テストコードを色々試すフォルダを用意したい。
確かエイリアス?リダイレクト?が出来るはずというところからスタート

やりたいこと

  1. Localhost/sandboxというURLでDocumentRoot外のディレクトリに飛ばす
  2. 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の設定

  1. Alias用のモジュールを有効化 対象の行のコメントアウトを外す
     LoadModule alias_module modules/mod_alias.so
  2. Aliasにマッピングするディレクトリは絶対パス。DocumentRoot以下なら相対でもいける?
    <Directory>ディレクティブに示すパスはAlias名でも良いとあったが、上手くいかなかったのでこちらも絶対パスで指定

Rewriteの設定

  1. "RewiteEngine On"はhttpd.conf内のModuleをコメントアウトしておけば不要かと思ったけど一応記載
    LoadModule rewrite_module modules/mod_rewrite.so

  2. ReriteBase
     こいつが一番厄介だった。Rewrite先の基準パスってことだけど、どう書けばよいのか。
    通常はURLの示すディレクトリパス(.htaccess基準なら/で解決)なんだけども。ここに示す基準パスってのは最終的なRewriteにくっつくURLのことみたい。
    なので今回はAliasで読み替えた後のパス名で記載が必要だった。
    URL: localhost/sandbox → Source: /source/sandbox なら
    URL: localhost:sandbox/index.php/ → Source: /source/sandbox/index.php/ となる

  3. メインの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"の内容が表示されました。

これでようやくテストスペースができた。というお話。

参考

http://bashalog.c-brains.jp/10/11/16-121901.php
https://rfs.jp/server/apache/02apache/url_rewrite.html
https://ysklog.net/mod-rewrite/rewrite-base.html

用語の意味

Alias:リクエストされた特定のURLに対して(DocumentRoot以外の)任意のリソースフォルダにマッピングすること。
ReWrite:リクエストされてサーバーが受け取ったURLに対して、任意のURLに読み替える。Apacheでは正規表現でURLをマッチさせて置換する形
Redirect:いわゆる引っ越し先へのリダイレクト。URL自体が変換されて返される

Discussion

ログインするとコメントできます