Apacheのmod_rewriteについての質問です。


http://www.example.jp/というサブドメインを持つサイトを新しくhttp://new.example.jp/というサブドメインで運用する予定ですが、しばらくは旧サイトのコンテンツを残したまま運営を続けたいと思っています。下の三点の条件を満たすようにmod_rewriteの記述はどのようにすれば良いでしょうか?

・ファイル・ディレクトリの指定のない
http://www.example.jp/ へのアクセスはすべて
http://new.example.jp/ へリダイレクト

・特定ディレクトリfooの名前のみを指定した
http://www.example.jp/foo/ へのアクセスも
http://new.example.jp/ へリダイレクト

・ただしfoo以下のディレクトリやファイルを指定する
http://www.example.jp/foo/bar/ や
http://www.example.jp/foo/bar/xxx は
リダイレクトせずに旧ページを表示する

という設定になります。よろしくお願いします。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2012/11/14 04:13:06
  • 終了:2012/11/21 04:15:03

回答(2件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/11/14 06:19:43

ポイント100pt

>foo以下のディレクトリやファイルを指定する

この条件を逆手にとって、
「foo以下のディレクトリやファイルを指定する以外の場合は新サイトへ飛ばす」とした例

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^foo/.+$
RewriteRule ^.* http://new.example.jp/? [R=301,L]

旧サイトのルート直下にhtaccessを設置する場合など、
RewriteBaseが不要(あるいは邪魔)な場合があります。
新サイト末尾の ? はパラメータを受け継がないという指定のため、
パラメータを引き継ぐ必要がある場合は ? を消します。
R=301はアクセスしてきた相手に対して、
「新サイトへの恒久的な移動」を知らせます。
R=301の効用としてはサーチエンジンの登録情報自動書き換えや、
旧サイトへの無用なアクセス減少などが期待できます。
 
上記に「実在しない場合も新サイトへ飛ばす」を加えた例

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^foo/.+$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* http://new.example.jp/? [R=301,L]

 
上記に「hoge」「fuga」を加えた例

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^(foo|hoge|fuga)/.+$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* http://new.example.jp/? [R=301,L]
id:oil999 No.2

oil999回答回数1728ベストアンサー獲得回数3202012/11/14 08:26:47

ポイント100pt

・ファイル・ディレクトリの指定のない
http://www.example.jp/ へのアクセスはすべて
http://new.example.jp/ へリダイレクト

これはmod_rewriteではなくネームサーバのゾーン設定によって行います。
ご利用のネームサーバによって設定手順は異なりますが、たとえば「さくらレンタルサーバ」なら以下のようにします。
http://web.showjin.me/2011/12/sakuravps_dns.html

・特定ディレクトリfooの名前のみを指定した
http://www.example.jp/foo/ へのアクセスも
http://new.example.jp/ へリダイレクト

・ただしfoo以下のディレクトリやファイルを指定する
http://www.example.jp/foo/bar/ や
http://www.example.jp/foo/bar/xxx は
リダイレクトせずに旧ページを表示する

次のようにします。

RewriteEngine On
RewriteBase /
RewriteRule ^/foo/$ http://new.example.jp/ [R=301,L]

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません