リダイレクト処理

いきさつ

大学同窓会に属するグループのホームページをNetcommons2で作って8年維持してきましたが、担当の引継ぎを想定すると、Netcommons3へ移行するのでなく、サポート会社が付いている同窓会のホームページ内に移動させる方が管理が楽と見て、この1年引っ越し作業を行ってきました。

URLは http://efgh.net から、https://www.abc.ne.jp/efgh/ に変わります。
(abcとefghは仮名)

旧サイトから新サイトに.htaccessでリダイレクトさせることにしました。

リダイレクト処理はWeb情報を見て作りました。
2015年の資料で少し古いのですが、下記のWeb情報が私には一番分かりやすく有
益でした。
https://www.doe.co.jp/hp-tips/server/htaccess-設定まとめ-2

ところが実際にやってみるとなかなかうまく動作しません。
何とか解決しましたが、2つの問題がありました。

.htaccessによるリダイレクト

元の.htaccessの副作用

大部分のページはtopページの元に同じ配置にしており、
例えば、http://efgh.net/plate/ から https://www.abc.ne.jp/efgh/plate/ へと移動するので、

RewriteEngine On
RewriteBase /
RewriteCond %{http_host} ^efgh.net
RewriteRule ^(.*)$ https://www.abc.ne.jp/efgh/$1 [R=301,L]

これで同じ構成のページならtop以下のページも素直にリダイレクトするはずでしたが、下位ページに移らず、全部トップページに移動してしまいます。
http://efgh.net/plate/ とインプットすると、URLは
https://www.abc.ne.jp/efgh/index.php?_restful_permalink=plate/
と表示され、index.htp? 以下は無視されました。

その原因は、.htaccessに元からnetcommons2によって書かれていた下記の記述の影響でした。元の記述を削除すると動作しなくなる恐れがあるとのネット情報の警告に従って残したのが災いしました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (/images/|/css/|/js/|/themes/)(.*)$ /$1$2 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?_restful_permalink=$1 [QSA,L]
</IfModule>

この後に先程のスクリプトを記述したのですが、</Ifmodule>の直前のRewriteRuleが働いたためでした。この元々あった記述を .htaccess の末尾に移動させ、先に今回のリダイレクト指示が効くようにすると、期待通りの動作になりました。

500 Internal Server Error

次にサイトのページ配置構成が変わった部分が6箇所あり、上位のページ内に統合されたり、ページ名が変わったりしたので、そこは先に個別にリダイレクト先を指定することにしました。

ところが実行させると500 internal Server Errorになってしまいます。


これの原因は文法ミスと思い、Web情報をあれこれ見ましたが、間違いが見つかりません。これは[R=301,L]の=が1か所だけ-に化けていたという単純誤記で、気づくまで時間がかかりました。

また、ブラウザはchromeを常用していますが、キャッシュが強力で.htaccessを変更したとき動作に変更が反映されず、混乱することがありました。

.htaccessによる今回のリダイレクト(実名とは変えてあります。)

RewriteEngine On
RewriteBase /
# http://efgh.net/guide/qa_exam/⇒https://www.abc.ne.jp/efgh/guide/
# /guide/qa_exam/ページを/guide/ページ内に移動したため
RewriteCond %{http_host} ^efgh.net
RewriteRule ^guide/qa_exam/(.*)$ https://www.abc.ne.jp/efgh/guide/ [R=301,L]
#
# http://efgh.net/archive/kinenshi/⇒https://www.abc.ne.jp/efgh/kinenshi/
RewriteCond %{http_host} ^efgh.net
RewriteRule ^archive/kinenshi/(.*)$ https://www.abc.ne.jp/efgh/kinenshi/ [R=301,L]
#
# http://efgh.net/archive/activity-log/⇒https://www.abc.ne.jp/efgh/archive/events/
RewriteCond %{http_host} ^efgh.net
RewriteRule ^archive/activity-log/(.*)$ https://www.abc.ne.jp/efgh/archive/events/ [ R=301,L]
#
# http://efgh.net/info/events/⇒https://www.abc.ne.jp/efgh/
# /info/events/ページをトップページ内に移動したため
RewriteCond %{http_host} ^efgh.net
RewriteRule ^info/events/(.*)$ https://www.abc.ne.jp/efgh/ [R=301,L]
#
# http://efgh.net/info/plan/⇒https://www.abc.ne.jp/efgh/archive/lists_detail/
RewriteCond %{http_host} ^efgh.net
RewriteRule ^info/plan/(.*)$ https://www.abc.ne.jp/efgh/archive/lists_detail/  [R=301,L]
#
# http://efgh.net/info/⇒https://www.abc.ne.jp/efgh/
# /info/ページをトップページ内に移動したため
RewriteCond %{http_host} ^efgh.net
RewriteRule ^info/(.*)$ https://www.abc.ne.jp/efgh/ [R=301,L]
#
# 同じ構成のページのリダイレクト指示
RewriteCond %{http_host} ^efgh.net
RewriteRule ^(.*)$ https://www.abc.ne.jp/efgh/$1 [R=301,L]
#
# 元々NetCommons2が用意したscript 多分不要
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (/images/|/css/|/js/|/themes/)(.*)$ /$1$2 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?_restful_permalink=$1 [QSA,L]
</IfModule>

#はコメント行です。