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

これを防ぐために、下記のようにして対処しました。

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 の内容はケース・バイ・ケースですが、大事なのは、この位置で処理すればパラメータが付かない、ということになります。

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...