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/でアクセスさせたいと言うこと。
1 2 3 4 5 6 |
/var/www/html (httpd.confでnetwork-learning.netのDocumentRootに設定されていると仮定) | |--- diary |--- hoge |--- subhoge |--- yone |
1 2 3 4 5 6 7 8 |
RewriteEngine on RewriteBase / RewriteRule ^$ diary/ [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # !-f は存在するファイル名にはルールを適用しない # !-d は存在するディレクトリ名にはルールを適用しない RewriteRule ^(.+)$ diary/$1 [L] |
DocumentRootじゃないときの例
単にAliasやシンボリックリンクでどうとでもなりそうな気がするけど、例1) .htaccessをDocumentRoot(/var/www/html)に置く
http://network-learning.jp/foo/にアクセスがあったとき、/var/www/html/hoge/subhogeのデータを表示させる。
1 2 3 4 5 6 |
RewriteEngine on RewriteBase / RewriteRule ^foo/$ hoge/subhoge/ [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^foo/(.+)$ hoge/subhoge/$1 [L] |
- URLからディレクトリ構成へ http://network-learning.jp/foo/ →/var/www/html/foo/
- DocumentRootでの分割 “/var/www/html/” + “foo/”
- RewriteRuleでの置きかえ “foo/” → “hoge/subhoge/”
- RwriteBaseを元に戻す “hoge/subhoge/” → “/hoge/subhoge/”
- 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のデータを表示させる。
1 2 3 4 5 6 |
RewriteEngine on RewriteBase hoge/ RewriteRule ^$ subhoge/ [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ subhoge/$1 [L] |
- URLからディレクトリ構成へ http://yuu.nkjm.info/hoge/ →/var/www/html/hoge/
- DocumentRootでの分割 “/var/www/html/” + “hoge/”
- RewriteRuleでの置きかえ “hoge/” → “subhoge/”
- RwriteBaseを元に戻す “subhoge/” → “/hoge/subhoge/”
- DocumentRootを元に戻す “/hoge/subhoge/” → “/var/www/html/hoge/subhoge/”
参考 * mod_rewriteメモ(1):RewriteBaseの誤解