こんにちは、ショウゴ(@gorian91)です。
先日、ブログのパーマリンクを変更し、記事のURLが変更になったので、全記事に301リダイレクトの設定を行ったのですが、日本語を含むURLだけリダイレクトが失敗する現象が起きて、解決するのに時間がかかりました。
地味に手間がかかったので、同じ問題に遭遇している方の参考となるように作業手順と注意点についてまとめておきました。
日本語を含むURLを301リダイレクトで転送する
全体の作業手順としてはこうです。
[aside type=”boader”]
- 移転元のURL一覧を取得
- 移転元のURLをデコードする
- パーマリンクを変更
- 新しい記事のURL一覧を取得
- .htaccessに301リダイレクト処理を記述
- リダイレクトできているかを確認
[/aside]
[aside]
サーバーはエックスサーバー、ブログはWordPressを使って構築をしている前提で話を進めていきます。
[/aside]
移転元のURL一覧を取得する
301リダイレクトの設定を行うために、まずは元記事のURL一覧を取得します。
WordPress限定ですが、記事のURL一覧を取得する方法を解説している記事があったので、こちらの記事を参考に作業を行いました。
[aside type=”boader”] WordPressの記事のURLの一覧を取得する方法[/aside]
やり方としては、WordPressのテーマ編集からfunctions.phpに記事URL一覧を取得する関数を追加して一覧を取得、コピペする方法ですね。
僕が調べた限りでは、これが一番楽やり方でした。
取得したURLをGoogleスプレッドシートでファイルを作成して、そこにコピーしておきます。
移転元のURLをデコードする
記事のURL一覧が取得できたら、次は元記事のURLをデコードして日本語に変換します。
先程、説明したやり方でURLを取得すると、移転元のURLはエンコード(記号化)された状態で取得されます。
つまり、こういう状態で取得されます。
[aside type=”boader”]https://gorian91.com/2018/02/08/%e3%82%b3%e3%83%a9%e3%83%a0/9488/[/aside]
ですが、日本語URLを301リダイレクトする場合、移転前のURLはエンコード前の日本語URLを記述する必要があるので、
[aside type=”boader”]https://gorian91.com/2018/02/08/コラム/9488/[/aside]
こうしておく必要があります。
これをやってないとリダイレクトに失敗するっぽいので、記号化された部分のURLを日本語に変換しておきましょう。
僕はこのツールを使って一括で変換しました。
[aside type=”boader”] URLエンコード・デコードフォーム[/aside]
取得したURLを貼り付けるだけでまとめて変換できるので楽ちんです。
パーマリンクを変更する
元記事のURLを取得し、デコード(日本語に変換)できたら、次はパーマリンク設定を変更します。
「WordPressの設定>パーマリンク設定」から任意の設定に変更して保存。
移転後のURLを取得する
次に移転元の記事URLを取得したのと同じやり方で、パーマリンク変更後の新しいURLを取得します。
移転元の記事URLの取得作業で追加したURLの一覧を取得する関数をそのままにしておき、パーマリンク変更後にプレビューすれば、新しいURLの一覧が取得できます。
.htaccessに301リダイレクト処理を記述
移転元と移転後のURLを取得できたら、あとは.htaccessに301リダイレクト処理を記述すればOK。
コードはこんな感じです。
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^移転元の記事URL 新しい記事URL [R=301,L] </IfModule>
事前にGoogleスプレッドシートでこのような表を用意しておくと作業が楽になります。
記述するコードが準備できたら、あとは、エックスサーバーのファイルマネージャーから、.htaccessファイルを開きコードを追記します。
コードを追記したら、保存文字コードを「UTF-8」に設定して保存して設定完了です。
[aside]
エックスサーバーでは、「.htaccess編集」という機能がありますが、この機能を使って.htaccessファイルを編集すると文字コードが「EUC」で保存され、結果、それが原因でリダイレクトが失敗してしまいます。
なので、.htaccessファイルを編集する場合は、ファイルマネージャーから編集し、保存文字コードを「UTF-8」にするようにしましょう。
[/aside]
リダイレクトができているかを確認
作業が終わったら、あとはリダイレクトができているかを確認します。
リダイレクトを検証ツールでURLを入力して確認。
[aside type=”boader”]リダイレクト検証ツール[/aside]
リダイレクトできていることが確認できたら、最後に念のため、移転元のURLを入力して、新しいURLが表示されるかも確認しておきましょう。
無事に移転されたら設定は完了です。
[aside]リダイレクト検証ツールではリダイレクトが効いてるっぽいのに、ブラウザで開いたらリダイレクトされないときは、ブラウザのキャッシュが残っているだけかもしれないので、キャッシュを削除してから確認すると確実です。[/aside]
まとめ
作業自体はそれほど複雑ではありませんが、日本語URLをエンコードされた状態で記述していたらリダイレクトが効かないのと、文字コードをUTF-8にしておかないと失敗するので、その2点だけは注意しておく必要があるかなと思います。
あと、僕の場合はブラウザのキャッシュを削除するのを忘れるという初歩的なミスをして「設定できているのにリダイレクトされない…なんでや…」という状態になったので、確認する前のキャッシュの削除もお忘れなく。
[aside]
.htaccessファイルは編集方法を間違うと、ブログが表示されなくなることもあるので、作業をする前は必ずバックアップをして復元できるようにしておきましょう。
[/aside]