Craft CMS で旧サイト URL を新サイト URL にリダイレクトするときにパラメータが付いてしまうのを防ぐ方法をご紹介します。
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
これを防ぐために、下記のようにして対処しました。
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
の内容はケース・バイ・ケースですが、大事なのは、この位置で処理すればパラメータが付かない、ということになります。
以上です。