in Kanazawa -  ks-eek.net

blogトップ#010 PC・デジタル・家電等#015 ネット関係 > さくらのレンタルサーバ ライト「なんりゃってエイリアス」の改良
« やばっ、元日から更新してない(w | スズキ ランディ »

2007年01月27日

さくらのレンタルサーバ ライト「なんりゃってエイリアス」の改良

さくらライト+mod_rewriteでフォルダ振り分けしたときに、最後のスラッシュを付けないと親ディレクトリ名がバレる問題の解法の一つ

<追記 2008/11>
ライトプランでも、上位プラン同様にエイリアス機能が使用できるようになりました。mod_rewriteによる「なんちゃってエイリアス」から、さくら公式のエイリアスに切り替える場合は、.htaccessからmod_rewriteの当該ドメイン関係の記述をすべて削除してください。さくら公式のエイリアスでは、下記のような問題は発生しませんので、ぜひ公式エイリアスをご利用ください。
</ここまで追記>

さくらのレンタルサーバ ライトプラン1契約だけで複数のドメインを使い分けたい場合で、
http://www.exapmle.com/ にアクセスしたときに、www/(ルート)ではなくwww/hoge/の内容を表示させて、他のドメインとディレクトリを区別したい場合にはいくつか方法があるのですが、

方法1、さくらが提供しているリダイレクト機能を使う。
http://www.example.com/にアクセスすると、http://www.exapmle.com/hoge/に瞬時に飛ばされる。当然、ブラウザのアドレスバーにも/hoge/を含んだURLが表示される。
この方法がライトプランで公式に使える唯一の方法なのですが、アドレスにディレクトリ名がくっついてしまうため、あまり使われていません。

方法1の例 アドレスバーに入力したURL ページ表示完了時のアドレスバー
例A ドメインのルート http://www.example.com/ http://www.example.com/hoge/
例B ファイル http://www.example.com/bar.html http://www.example.com/hoge/bar.html
例C 子ディレクトリを / 有りで http://www.example.com/foo/ http://www.example.com/hoge/foo/
例D 子ディレクトリを / 無しで http://www.example.com/foo http://www.example.com/hoge/foo/

----

方法2、mod_rewrite(RewriteModule)で内部的に書き換える。(なんちゃってエイリアス)
スタンダードプランやプレミアムプランでのみ提供されている「エイリアス」を、ライトでもやってしまおうという方法です。
方法は「さくらのレンタルサーバ非公式FAQ」の「ドメイン毎に振分」に載っています。
この方法を使うと、http://www.example.com/にアクセスしたとき、別のURLに飛ばされることなくそのまま表示されます。一部の場合を除いては、ですが。

www/の.htaccessファイルに
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.example¥.com [NC]
RewriteCond %{REQUEST_URI} !^/hoge/.*
RewriteRule (.*) /hoge/$1 [L]

方法2の例 アドレスバーに入力したURL ページ表示完了時のアドレスバー
例A ドメインのルート http://www.example.com/ http://www.example.com/
例B ファイル http://www.example.com/bar.html http://www.example.com/bar.html
例C 子ディレクトリを / 有りで http://www.example.com/foo/ http://www.example.com/foo/
例D 子ディレクトリを / 無しで http://www.example.com/foo http://www.example.com/hoge/foo/

例Dのように、ディレクトリ名の最後にスラッシュを付けずにアクセスしてしまうと、他の場合には表示されないディレクトリ名「hoge」がアドレスバーに表示されてしまいます。
www/hoge/foo/にアクセスできるURLが、http://www.example.com/foo/とhttp://www.example.com/hoge/foo/の2つ、一般に公開されてしまうわけです。
まぁ検索エンジンに同内容のページが2つあるなと思われるだけで実害無かったりもするのですが、気持ち悪いので対策を考えてみます。方法3です。

----

方法3、なんちゃってエイリアス改
www/の.htaccessファイルに
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.example¥.com$ [NC]
RewriteCond %{REQUEST_URI} ^/hoge/hoge$
RewriteRule () / [R=301]
RewriteCond %{HTTP_HOST} ^www¥.example¥.com [NC]
RewriteCond %{REQUEST_URI} !^/hoge/.*
RewriteRule (.*) /hoge/$1 [L]
RewriteCond %{HTTP_HOST} ^www¥.example¥.com$ [NC]
RewriteCond %{REQUEST_URI} ^/hoge/[A-Za-z0-9]+$
RewriteRule ([A-Za-z0-9]+$) /$1/ [R=301]

方法3の例 アドレスバーに入力したURL ページ表示完了時のアドレスバー
例D 子ディレクトリを / 無しで http://www.example.com/foo http://www.example.com/foo/

ただ、http://www.example.com/foo/foo2のように孫ディレクトリまで指定されると効力が無い。
どうしようかは考え中。

http://www.example.com/hoge/foo/を指定されたときも効力がない。これはどうしようもない様子。

投稿者 けーえすtj : 2007年01月27日 12:59

トラックバック

このエントリーのトラックバックURL:
http://blog.ks-eek.net/mt-tb.cgi/337

コメント

コメントしてください




保存しますか?