Craft CMS で旧サイトURLを新サイトURLにリダイレクトするときにパラメータが付いてしまうのを防ぐ

Craft CMS で旧サイト URL を新サイト URL にリダイレクトするときにパラメータが付いてしまうのを防ぐ方法をご紹介します。

Craft CMS Logo

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 には、初期状態では下記のように書かれています。

<IfModule mod_rewrite.c>
 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]
</IfModule>

ここで設定されているリダイレクトルールの先頭に、下記のように RewriteCond ルールを挿入します。

<IfModule mod_rewrite.c>
 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]
</IfModule>

これでパラメータが付くことなく新 URL にリダイレクトできました。

もちろん RewriteRule の内容はケース・バイ・ケースですが、大事なのは、この位置で処理すればパラメータが付かない、ということになります。

以上です。

Published 2017-05-02
Updated 2019-06-25