yuu_nkjm blog
2010-05-17(Mon) [長年日記]
[Apache][.htaccess] DocumentRootを指し示すURLにアクセスがあったときに,mod_rewriteを使ってDocumentRootに含まれる別ディレクトリのコンテンツを表示させたい
DocumentRoot(ドキュメントルート)を指し示すURLにアクセスがあったときに,mod_rewriteを使ってDocumentRootに含まれる別ディレクトリの下のコンテンツを表示させたいと思った.
URLと違うディレクトリにアクセスさせる(http://yuu.nkjm.info/hoge/へのアクセスをhttp://yuu.nkjm.info/diary/にするとかね)ことは,DocumentRootそのものじゃないときは,Aliasやシンボリックを使ってなんとかしてきた.「だけど,DocumentRootそのものへのアクセスをDocumentRootに含まれる別ディレクトリに変えたいときはどうすりゃいいんだろ?適当にやると再帰しちゃわね?」と思い色々やってみた.
ちなみになんでこんな事がしたいのかというと,http://yuu.nkjm.info/でtdiaryにアクセスさせたいんだけど,tdiaryを/var/www/htmlにインストールすると,/var/www/htmlがごちゃごちゃしちゃって嫌だ.なので,/var/www/html/tdiary/にtdiaryをインストールするんだけど,http://yuu.nkjm.info/でアクセスさせたいと言うこと.
/var/www/html (httpd.confでyuu.nkjm.infoのDocumentRootに設定されていると仮定) | |--- diary |--- hoge |--- subhoge |--- fuga
上の様なディレクトリ構成で,/var/www/htmlがhttp://yuu.nkjm.info/のドキュメントルートだったとき,/var/www/htmlに以下の.htaccessを置くと,http://yuu.nkjm.info/へのアクセスがhttp://yuu.nkjm.info/diary/へのアクセスに置き換わる.またこの時,ブラウザのURL欄は変わることはない(i.e. http://yuu.nkjm.info/と表示される).
RewriteEngine on
RewriteBase /
RewriteRule ^$ diary/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# !-f は存在するファイル名にはルールを適用しない
# !-d は存在するディレクトリ名にはルールを適用しない
RewriteRule ^(.+)$ diary/$1 [L]
このとき注意しなきゃいけないのは,転送先のdiaryにCMSのようなプログラムが置かれていてそいつに設置URLのようなパラメータがあるとき,異なるURLからアクセスするとそれに関する警告がでたり,自動生成で作られるサイト内URLが転送先のものになったりする.
DocumentRootじゃないときの例
単にAliasやシンボリックリンクでどうとでもなりそうな気がするけど,メモ.
例1) .htaccessをDocumentRoot(/var/www/html)に置く
http://yuu.nkjm.info/foo/にアクセスがあったとき,/var/www/html/hoge/subhogeのデータを表示させる.
RewriteEngine on
RewriteBase /
RewriteRule ^foo/$ hoge/subhoge/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^foo/(.+)$ hoge/subhoge/$1 [L]
- URLからディレクトリ構成へ http://yuu.nkjm.info/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://yuu.nkjm.info/hoge/にアクセスがあったとき,/var/www/html/hoge/subhogeのデータを表示させる.
RewriteEngine on
RewriteBase hoge/
RewriteRule ^$ subhoge/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ subhoge/$1 [L]
http://yuu.nkjm.info/hoge/にアクセスがあると…
-
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/"
参考ページ
-
技術/Apache/mod_rewrieメモ(1):RewriteBaseの誤解 - Glamenv-Septzen.net
「自信ない…」とのことだが「mod_rewriteの内部処理のイメージ」を参考にさせていただいた.これが正しいかは分からないが,上記のテストをする範囲では納得のいく説明だった. -
mod_rewritの基本を再確認 - noopな日々
より複雑な設定が必要な時に参考になりそうだった. - Gyazo - e05b54baa654af685ab711adb2ed1a84
- Gyazo - a6836229ea1b406451ed6805ca75443b
- Gyazo - 011e70a2f063c3b783302a6757846916
- (cache) サーバー構築の覚書 » DocumentRootを指し示すURLにアクセスがあったときに,mod_rewriteを使ってDocumentRootに含まれる別ディレクトリのコンテンツを表示させたい
- http://ysearch.luna.tv/search.aspx?puid=109&client... ×1
- http://ysearch.luna.tv/search.aspx?keyword=Rewrite... ×1
- https://www.google.co.jp/ ×5538
- https://www.google.com/ ×165
- https://www.google.co.jp/ ×15
- http://d.hatena.ne.jp/noopable/20091009/1255067858... ×10
- https://www.google.co.kr/ ×7
- http://search.yahoo.co.jp/ ×6
- https://www.google.co.th/ ×5
- https://www.google.com.tw/ ×5
- http://www.delicious.com/tohosaku ×4
- https://www.google.com.ph/ ×3
- https://www.google.com/webhp?hl=ja ×3
- https://www.bing.com/ ×3
- https://www.google.com.au/ ×2
- https://duckduckgo.com/ ×2
- https://www.google.com.vn/ ×2
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×2
- https://www.google.com/search ×2
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- http://ysearch.luna.tv/search.aspx?keyword=htacces... ×1
- http://ysearch.luna.tv/search.aspx?puid=109&client... ×1
- http://b.hatena.ne.jp/aokishinya/?with_favorites=1... ×1
- http://blog.hatena.ne.jp/motomichi_works/motomichi... ×1
- http://search.conduit.com/results.aspx?q=htaccess ... ×1
- https://www.google.co.jp/webhp?sourceid=chrome-inst... ×1
- http://webblock101.ddreams.jp:15871/cgi-bin/blockO... ×1
- http://b.hatena.ne.jp/baby-baby/ ×1
- http://www.kio-denshi.com/hp/index.php?cmd=read&pa... ×1
- http://yandex.ru/clck/jsredir?from=yandex.ru;searc... ×1
- https://www.google.co.jp/search?q=htaccess パス ドキュメ... ×1
- http://poka-n.net/ ×1
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- http://search.fenrir-inc.com/?q=mod_rewrite アクセス&h... ×1
- https://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou... ×1
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- http://nortonsafe.search.ask.com/web?q=apache docu... ×1
- https://www.google.com.br/ ×1
- http://kio-denshi.com/hp/index.php?Modify ×1
- http://search.fenrir-inc.com/?q=htaccess ドキュメントルート... ×1
- http://search.fenrir-inc.com/?q=mod_rewrite squid&... ×1
- http://ysearch.luna.tv/search.aspx?keyword=Rewrite... ×1
- https://www.google.co.jp/search?client=ds&ie=utf-8... ×1
- https://www.facebook.com/ ×1
- http://search.fenrir-inc.com/?q=html ドキュメントルート jav... ×1
- http://b.hatena.ne.jp/search/tag?q=ルート ×1
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- https://www.google.co.jp/webhp?client=firefox-a&rlz... ×1
- https://www.google.com/ ×1
- http://search.fenrir-inc.com/?q=%{REQUEST_FILENAME... ×1
- http://search.fenrir-inc.com/?q=apache documentroo... ×1
- https://www.google.pl/ ×1
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- http://search.babylon.com/?q=mod_rewrite urlが変わる&s... ×1
- http://nortonsafe.search.ask.com/web?q=ドキュメントルートへの... ×1
- http://search.fenrir-inc.com/?q=.htaccess Document... ×1
- http://search.fenrir-inc.com/?q=url mod_rewrite &h... ×1
- https://www.google.co.uk/ ×1
- https://www.google.hu/ ×1
- https://www.google.fr/ ×1
- http://yandex.ru/clck/jsredir?from=yandex.ru;searc... ×1
- http://ho-youkitana.com/bookmarks.php ×1
- htaccess ドキュメントルート ×31 / htaccess documentroot ×23 / .htaccess ドキュメントルート ×16 / mod_rewrite ディレクトリ ×15 / .htaccess documentroot ×15 / .htaccess DocumentRoot ×11 / documentroot .htaccess ×10 / htaccess document root ×8 / ドキュメントルート .htaccess ×6 / mod_rewrite ドキュメントルート ×6 / mod_rewrite documentroot ×6 / htaccess ドキュメントルート設定 ×5 / rewriterule ドキュメントルート ×5 / %{REQUEST_FILENAME} 別ディレクトリ ×4 / .htaccess documentrrot ×4 / ドキュメントルート htaccess ×4 / mod_rewrite ルート ×4 / htaccess DocumentRoot ×4 / tdiary mod_rewrite ×4 / documentroot htaccess ×3 / httpd ドキュメントルートを分割 ×3 / document root apache リライト ×3 / modRewite ディレクトリ ×3 / DocumentRoot http:// ×3 / apache mod_rewrite 処理イメージ ×3 / DocumentRoot htaccess ×3 / htaccess ドキュメントルートの変更 ×3 / mod_rewrite DocumentRoot ×3 / rewriterule documentroot ×3 / mod_rewrite 参考書 ×3 / mod_rewrite ルートディレクトリ ×3 / rewriterule documentルート 変更 ×3 / .htaccess ドキュメントルート変更 ×2 / linux RewriteRule DocumentRoot ×2 / ドキュメントルート リダイレクト ×2 / DOCUMENT_ROOTにする htaccess ×2 / .htaccess ドキュメントルート 変更 ×2 / apache htaccess ドキュメントルート リダイレクト ×2 / joomla mod_rewrite ×2 / rewrite ルート サブディレクトリ httpd.conf ×2 / htaccess Rewrite ディレクトリ ×2 / mod_rewrite documentroot rewritebase ×2 / mod_rewrite URLが変わる ×2 / .htacsses ドキュメントルートの変更 ×2 / DocumentRoot 転送 ×2 / ブラウザ url 欄 SERVER DOCUMENT_ROOT ×2 / +documentroot .htaccess ×2 / joomla mod_rewrite ディレクトリ ×2 / joomla ドキュメントルート ×2 / htaccess docmentroot ×2 / mod_rewrite .htaccess 別のディレクトリ ×2 / mod_rewrite 再帰 ×2 / RewriteCond documentroot ×2 / rewrite ドキュメントルート ×2 / documentroot rewrite rule ×2 / RewriteRule ドキュメントルートの設定 ×2 / documentroot RewriteRule ×2 / .htaccess document root ×2 / RewriteRule ドキュメントルート ×2 / htaccess ドキュメントルート 設定 ×2 / ドキュメントルート 転送 RewriteRule ×2 / DocumentRoot パスを書き換え ×2 / apache ドキュメントルートへのアクセス mod_rewrite ×2 / htaccess Documentroot ×2 / htaccess DocumentRoot RewriteEngine ×2 / joomla rewrite ルートディレクトリ ×2 / mod_rewrite ホームディレクトリ ×2 / ドキュメントルート htacess ×2 / ./htaccess ドキュメントルート以下 ×2 / rewriterule ルート ×2 / htaccess root document ×2 / Rewrite Google 異なるディレクトリ ×2 / document root .htaccess ×2 / mod_rewrite 分割 ×1 / ドキュメントルート ディレクトリ名 ×1 / Rewrite ルート .htaccess ×1 / ドキュメントルートにRewriteRule ×1 / git フォルダ構成を変えたい ×1 / apache DocumentRoot htaccess ×1 / DocumentRoot ディレクトリ win7 ×1 / rewrite documentroot ×1 / ドキュメントルート 別ディレクトリ ×1 / htaccess rewrite ドキュメントルート ×1 / .htaccess ドキュメントルートをサブディレクトリ ×1 / tdiary documentroot ×1 / var/www/html Documentroot 設定 ×1 / htaccess apache2 ドキュメントルート rewrite ×1 / apache Rewrite ドキュメントルート ×1 / mod_rewrite 再帰的 ×1 / rewrite documentrootを変更 ×1 / rewrite 再帰 ×1 / rewritebase document root 変える ×1 / document root を調べる ×1 / RewriteCond w2box ×1 / apahce ドキュメントルートにアクセス mod_rewrite ×1 / URLに 含まれる uwsc ×1 / rewirte ディレクトリ ×1 / document root ×1 / windows rewrite htaccess ディレクトリ名 ×1 / SoftBank 転送不可 ディレクトリ mod_ ×1