DocumentRootを指し示すURLにアクセスがあったときに,mod_rewriteを使ってDocumentRootに含まれる別ディレクトリのコンテンツを表示させたい

DocumentRoot(ドキュメントルート)を指し示すURLにアクセスがあったときに、mod_rewriteを使ってDocumentRootに含まれる別ディレクトリの下のコンテンツを表示させたいと思った。

URLと違うディレクトリにアクセスさせる(http://network-learning.jp/hoge/へのアクセスをhttp://network-learning.jp/diary/にするとかね)ことは、DocumentRootそのものじゃないときは、Aliasやシンボリックを使ってなんとかしてきた、「だけど、DocumentRootそのものへのアクセスをDocumentRootに含まれる別ディレクトリに変えたいときはどうすりゃいいんだろ?適当にやると再帰しちゃわね?」と思い色々やってみた。

ちなみになんでこんな事がしたいのかというと、http://network-learning.jp/でtdiaryにアクセスさせたいんだけど、tdiaryを/var/www/htmlにインストールすると、/var/www/htmlがごちゃごちゃしちゃって嫌だ、なので、/var/www/html/tdiary/にtdiaryをインストールするんだけど、http://network-learning.jp/でアクセスさせたいと言うこと。

上の様なディレクトリ構成で、/var/www/htmlがhttp://network-learning.jp/のドキュメントルートだったとき、/var/www/htmlに以下の.htaccessを置くと、http://network-learning.jp/へのアクセスがhttp://network-learning.jp/diary/へのアクセスに置き換わる。またこの時、ブラウザのURL欄は変わることはない(i.e. http://network-learning.jp/と表示される)。

このとき注意しなきゃいけないのは、転送先のdiaryにCMSのようなプログラムが置かれていてそいつに設置URLのようなパラメータがあるとき、異なるURLからアクセスするとそれに関する警告がでたり、自動生成で作られるサイト内URLが転送先のものになったりする。

DocumentRootじゃないときの例

単にAliasやシンボリックリンクでどうとでもなりそうな気がするけど、

例1) .htaccessをDocumentRoot(/var/www/html)に置く

http://network-learning.jp/foo/にアクセスがあったとき、/var/www/html/hoge/subhogeのデータを表示させる。

  1. URLからディレクトリ構成へ http://network-learning.jp/foo/ →/var/www/html/foo/
  2. DocumentRootでの分割 “/var/www/html/” + “foo/”
  3. RewriteRuleでの置きかえ “foo/” → “hoge/subhoge/”
  4. RwriteBaseを元に戻す “hoge/subhoge/” → “/hoge/subhoge/”
  5. DocumentRootを元に戻す “/hoge/subhoge/” → “/var/www/html/hoge/subhoge/”
例2) .htaccessをDocumentRootのサブディレクトリ(/var/www/html/hoge)に置く

http://network-learning.jp/hoge/にアクセスがあったとき、/var/www/html/hoge/subhogeのデータを表示させる。

http://network-learning.jp/hoge/にアクセスがあると…

  1. URLからディレクトリ構成へ
    http://yuu.nkjm.info/hoge/ →/var/www/html/hoge/
  2. DocumentRootでの分割
    “/var/www/html/” + “hoge/”
  3. RewriteRuleでの置きかえ
    “hoge/” → “subhoge/”
  4. RwriteBaseを元に戻す
    “subhoge/” → “/hoge/subhoge/”
  5. DocumentRootを元に戻す
    “/hoge/subhoge/” → “/var/www/html/hoge/subhoge/”

参考 * mod_rewriteメモ(1):RewriteBaseの誤解

シェアする

  • このエントリーをはてなブックマークに追加

フォローする