Craft CMS で旧サイトURLを新サイトURLにリダイレクトするときにパラメータが付いてしまうのを防ぐ
2017-05-02
2分で読了
更新: 2025-12-14
目次
MTOS で運営していた旧サイトの URL を、Craft CMS に置き換えた新サイトの URL にリダイレクトするために、下記のようなリダイレクトの設定を .htaccess に書いてみました。
Redirect permanent /blog/2017/04/000087.html http://foo.bar/blog/63
この状態で旧 URL にアクセスすると、一応リダイレクトには成功するのですが、下記のように新 URL の後ろにパラメータがついてしまいました。
http://foo.bar/blog/63?p=blog/2017/04/000087.html
これを防ぐために、下記のようにして対処しました。
Redirect ではなく RewriteRule にする
public/.htaccess には、初期状態では下記のように書かれています。
RewriteEngine On
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
ここで設定されているリダイレクトルールの先頭に、下記のように RewriteCond ルールを挿入します。
RewriteEngine On
# Redirect from old URL to new URL
RewriteRule ^blog/2017/04/000087.html$ /blog/63 [R=301,L]
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
これでパラメータが付くことなく新 URL にリダイレクトできました。
もちろん RewriteRule の内容はケース・バイ・ケースですが、大事なのは、この位置で処理すればパラメータが付かない、ということになります。
以上です。