.htaccessとか
少し早めに「Nikola Tesla Center」から「SiReFaSo」への移転作業をしていました。師走にバタバタするのも何なので、余裕のあるうちに。
.htaccessでリダイレクトすればいいんだろーとタカを括っていたのですが、land.toサーバでは何か色々制限があって使えない記述があったりで苦労しました。後半でsitemixサーバについても触れてみます。
やりたいこと
「 http://nikola.ps.land.to/ntc/ 」およびそれ以下のディレクトリへのアクセスを「 http://sirefaso.appspot.com/ 」以下へマッピングさせる。ただし、「 http://nikola.ps.land.to/ntc/plugin/ntcmanager/ 」を除く。
pluginディレクトリ以下にはpluginの更新用ファイルが入っていて、起動時の更新の確認やネットワーク更新でアクセスがあるのですが、これはSiReFaSoに転送されても困るので。
普通に301リダイレクト
最初に書いたのはこんな感じのものです。
Redirect permanent /ntc/ http://sirefaso.appspot.com/
これで /ntc/ ディレクトリ以下に対するアクセスは全てSiReFaSoにマッピングされて転送されますが、plugin以下へのアクセスも転送されてしまいます。
RewriteRuleを使う
次に書いたのがこんな感じのものです。
RewriteEngine on
RewriteRule ^/ntc/((?!plugin).)*$ http://sirefaso.appspot.com/$1 [R=301]
RewriteEngine off
正規表現でpluginディレクトリだけを例外として、 /ntc/ ディレクトリ以下に対するアクセスをSiReFaSoにマッピングできます。
ローカルのApacheでは転送できたのですが、 land.to で試したら 500 Internal Server Error になりました。よくわかりませんが、使えないっぽいです。
RedirectMatchを使う
最初に書いたRedirectの親戚でしょうか、正規表現を使う書き方もできるんですね。
RedirectMatch permanent ^/ntc/((?!plugin).)*$ http://sirefaso.appspot.com/$1
これもローカルのApacheでは転送できたのですが、 land.to で試したら 500 Internal Server Error になりました。
下位ディレクトリであらためて.htaccess指定で上書きする
もうこれしか思いつきませんでした。 /ntc/ ディレクトリの.htaccessには最初に書いた通りにし、 /ntc/plugin/ntcmanager/ ディレクトリに.htaccessを置いて以下のように設定します。
Redirect gone /ntc/plugin/ntcmanager/
リダイレクトさえしなければ200を返しても構わないと思っていましたが、上位ディレクトリの指定をRedirectで上書きする必要があったので、もう更新しないしいっそ410 Goneでよかろう、という判断です。これでplugin更新問い合わせはSiReFaSoには来なくなりました。
ついでにsitemixについて
sitemixにある「ついっとゅう」の配布ページも移転したのでリダイレクトさせたいのですが、こちらは.htaccessそのものが使えません。PHPが使えるのでそれでなんとかしてみます。
http://nikola.sitemix.jp/twittyu/ へのアクセスのみで良いので、とりあえずindex.phpを作成して以下のように書きます。
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://midolaso.appspot.com/tw/twittyu/');
?>
そしてindex.htmlを削除します。これが残っていると優先的に表示されてしまうので。これで転送されるようになりました。
301と302の違い?「移転しました」じゃダメなの?
上記では 301 Moved Permanently を使用しています。これは恒久的な転送という意味です。302 Found は一時的な転送。「べ、別に移転したわけじゃないんだからねっ!一時的なものなんだからっ!」という旨をGoogleさんに伝えるときは302を使います。
「移転しました」と書いたHTMLファイルをアップしただけでは 200 OK を返し続けることになるのでGoogleさんには移転のお知らせは伝わりません。移転するときは 301 Moved Permanently を返すのがWebに優しいエチケットみたいなものです。