Mixtype

Xreaで、サイト内のディレクトリ構造を.htaccessで変える際の備忘録

Mixtype No.26 Last Update On 2010-01-12 2009 column

Xreaで、サイト内のディレクトリ構造を.htaccessで変える際の備忘録

Mixtype No.26 Last Update On 2010-01-12 2009 column
.htaccessファイルに、、、

RedirectPermanent /hoge.html http://aho.com/baka/hoge.html

で、ステータスコード「301 Moved Permanently」で/hoge.htmlへのアクセスをhttp://aho.com/baka/hoge.htmlへ。
参照:ミケネコの htaccess リファレンス

次に、これらを組み込んで動作するようになったら、
ステータスコード確認のためIf-Modified-Sinceヘッダチェックツールを使います。
「301 Moved Permanently」が出れば成功です。302だと「一時的」なので注意。

また、.htaccessが使えないために、メタタグのリフレッシュで転送させる場合は、<head>内に

<META HTTP-EQUIV="refresh" CONTENT="1;URL=http://hoge.com/">
<META NAME="robots" CONTENT="noindex,follow">

とすると良いそうです。
ちなみに、メタタグのリフレッシュとブラウザのJavascriptオフの機能を連動させると、スライドショー的な使い方が実現できます。

サーバ移転などによりリダイレクトさせるファイル数が多くなってくると、RedirectPermanentを使っているだけでは.htaccessそのもののファイルサイズが大きくなってきてしまい、読み込むたびにサーバに負荷がかかってくるので、RedirectPermanentを使わず、mod_rewriteで正規表現を組み込んでの301転送です。これは便利!
参照:サルにもわかる正規表現入門 / 技林>mod_rewrite

Options +FollowSymLinks
RewriteEngine On
RewriteBase /hoge/
RewriteRule ^(.*)\.html$ http://www.aho.com/baka/$1.html [R=301,L]

301でhogeディレクトリ内の拡張子がhtmlのファイルをhttp://www.aho.com/baka/以下に同じファイル名で転送。

Options +FollowSymLinks
RewriteEngine On
RewriteBase /hoge/
RewriteRule ^perl\.cgi(.*)$ http://www.aho.com/baka/perl.cgi$1 [R=301,L]

301でhogeディレクトリ内のperl.cgiに続く変数以下をそのままの名でhttp://www.aho.com/baka/以下に転送。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.com
RewriteRule ^(.*)$ http://www.hoge.com/$1 [R=301,L]

hoge.com へのアクセスを、www.hoge.comへそのままのファイル名で301転送。
独自ドメイン取得時に活用。Xreaの転送は302のようなので急遽設定しました。
参照:XREAの独自ドメインは転送設定?301リダイレクト?

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.com
RewriteRule ^(.*)$ http://www.hoge.com/ [R=301,L]

こうすると、hoge.com以下をファイル名は関係なく全てwww.hoge.comへ転送。

ちなみに.htaccessを置く場所について、以前は、最も上の階層にまとめて記述して置いていましたが、サーバへの負荷の問題で現在は.htaccessの内容を分け、置くディレクトリも分けています。
それと、指定する順番で処理が全然違ってくると言うことにようやく気付きました。
例えば、

RedirectPermanent /baka/ http://www.aho.com/baka/
RedirectPermanent /baka/hoge.html http://www.aho.com/baka/

とすると、/baka/hoge.htmlへのアクセスは、http://www.aho.com/baka/hoge.htmlになってしまいます。

RedirectPermanent /baka/hoge.html http://www.aho.com/baka/
RedirectPermanent /baka/ http://www.aho.com/baka/

こうすると、/baka/hoge.htmlへのアクセスは、http://www.aho.com/baka/となって、指定通り処理してくれます。

【%が%25にエンコードされてしまい、リダイレクトしない時の対処法は「NE」。】

Options +FollowSymLinks
RewriteEngine On
RewriteBase /hoge/
RewriteRule ^perl\.cgi(.*)$ http://www.aho.com/baka/perl.cgi$1 [R=301,L,NE]

【index.shtmlがリダイレクトされず残ってしまう時の対処法】

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge.com$
RewriteRule /index.(.*)html$ http://www.baka.com/ [R=301,L]

index.(文字列何でも)htmlと言う意味。