パーマリンク設定の途中変更時の対処法

2023年9月25日

【プロモーション】
 DMM FXへ
【プロモーション】
 LOLIPOP!へ
【プロモーション】
MuuMuu Domain
【プロモーション】
 Surfsharkへ
【プロモーション】
ビッグローブ光へ
【プロモーション】
ABEMAプレミアム
【プロモーション】
 じゃらんnetへ

なぜ途中からパーマリンク設定を変更したいのか

【プロモーション】
 楽天買い物へ

パーマリンク(Permanent link)は、ブログの個々の記事を投稿した際に表示されるリンク用URLのことです。
また、記事や固定ページにそれぞれに割り振られたユニークな「住所」のようなものとも言います。
 この記事のURLがあることで、ページ記事間の内部リンクや他サイトへの外部リンク、SNSでシェアすることなどができます。
 初心者にとって、Wordpressブログを開設した当時は、やり方なども分からず、とりあえずデフォルト設定のまま運営したのがほとんどです。例えば、「日付と投稿名」のデフォルト設定の場合、URLは「https://www.○○○.com/wordpress/yyyy/mm/dd/post-99/」というように常に日付が入って長く表示されてしまいます。
 気がついたら、もう運営期間が大分過ぎました。URLをスッキリしたいと思ってパーマリンク設定を変更しようと思う初心者の私はその中の一人です。
 しかし、ネット上いろんなサイトで調べたところ、パーマリンク設定を変更すると、今まで作った記事ページは「リンク切れ」になってしまい、ページが404エラーで「not found」となるよと言っています。
 また、その対処方法としては、プラグインを使ってリダイレクトやhtaccessの301リダイレクト方法があるのですが、プラグインリダイレクト方法はレスポンスが遅くなるので、301リダイレクト方法で設定変更を挑戦してみたいのですが、htaccessについてある程度の知識がないと非常に危険と言われています。              

 幸いなことに、当サイトは、当時はXAMPP-Wordpress非公開のローカル環境の話ですので、しかも投稿記事はまだ十数件しかありません。なので、htaccessの301リダイレクト方法を使って、思い切ってパーマリンク設定「日付と投稿名」→「投稿名」に変更します。

パーマリンクの設定はWordPressのインストール直後に

パーマリンクはWordPressをインストール直後に設定するのです。投稿記事を作成して運営した後からパーマリンク設定を変更すると、今まで作った記事ページは「リンク切れ」になってしまい、ページが404エラーで「not found」となるのです。

なので、WordPressをインストールした直後に決めるのがおすすめです。

リダイレクトとは

既存のページURLを新しいURLに変更するとして、 例えば、「日付と投稿名」 から 「投稿名」 に変更する場合、既存のURL: 「https://www.○○○.com/wordpress/yyyy/mm/dd/post-99/」 にアクセスすること、自動的に 「https://www.○○○.com/wordpress/post-99/」 へ誘導し、読者が該当ページの記事を閲覧することができます。このURLの転送することはリダイレクトと言います。

リダイレクト実施前の準備作業

前述のように、htaccessについてある程度の知識がないと非常に危険な作業になります。ですので、万が一失敗しても元の環境に戻せるために、htaccessの元設定をバックアップしておきましょう。

「.htaccess」の居場所

まず、当サイトはPCベースのローカルXAMPP-WordPressについて解説します。

WordPressの「.htaccess」の居場所は、次のところから確認できます。

●.htaccessファイルはWordPressフォルダーの直下にあります。

 WordPressフォルダーはXAMPPをインストールしたルートフォルダーにあります。ちなみに、XAMPPのルートフォルダーはc:\xampp\htdocsです(xamppをデフォルトc:にインストールした場合)。 c:\xampp\htdocs はhttps://www.○○○.com/のことです。

●或いは、wp-config.phpファイルとwp-adminやwp-contentフォルダーが並んでいるフォルダーにあります。

「.htaccess」は不可視ファイルです。通常は表示されないファイルとなっております。ですので、上部メニューバーにある「表示」から「隠しファイルを表示」にチェックを入れましょう。

バックアップ&復元

●バックアップ

 ーWordPressフォルダー直下にある.htaccessファイルをリネームして別のフォルダーに保存しておきます

 ー(念のため)C:\xampp\htdocs\wordpress\直下にあるwp-contentフォルダーごとをコピーしておきましょう

●復元

 「.htaccess」で301リダイレクトがうまくいかない場合の復元手順:

①「ダッシュボード管理画面」→「設定」→「パーマリンク設定」→「●日付と投稿名」を選択→
 「変更を保存」

②バックアップした「.htaccess」ファイルを元に戻す。

③個々の記事ページが正常に遷移することを確認します

301リダイレクト設定コードを.htaccessに追記

いよいよ、既存のパーマリンク設定を「日付と投稿名から「投稿名」に変更する作業に入ります。

【ステップ1】既存パーマリンク設定の「日付と投稿名」から「投稿名」に変更します。

「ダッシュボード管理画面」→ 「設定」→「パーマリンク設定」→「●投稿名」を選択→「変更を保存」 (Fig. Perma-link 設定1 参照)

Fig. Perma-link 設定1

【ステップ2】301リダイレクトの設定コードを.htaccessに追記します。

       テキストエディターで既存の.htaccessを開いて、以下のコードを追記します。( Fig. htaccess-1参照 ) 

Fig. htaccess-1 追記コード

【注意】上記コードは必ず既存htaccessの記述コードより上のところに追記します。 ( Fig. htaccess-2参照 ) 

Fig. htaccess-2 追記箇所
【プロモーション】
 楽天Travelへ

.htaccess動作しない原因調査

【ステップ2】.htaccessコードの追記作業が終わりました。WordPressに再ログインして、記事ページの遷移結果を確認したら、すべてのページが404エラーで"not found"となってしまっています。これはやばいな・・・

直ぐに、原因調査作業に入って、丸一日かかって結局のところ.htaccessは動作しないまま放っておきました。翌日、頭がすっきりしてから次の「 ●原因調査 」で.htaccessが動作しない原因が分かりました。

●原因調査

まず、「.htaccess」の追記コードに対して、再度以下のように確認します。

・1行目の「#BEGIN 301 Redirect」と6行目の「#END 301 Redirect」の部分はコメントなので不要であれば削除してもOKです。

・2行目の「<IfModule mod_rewrite.c>」は、Apacheサーバーに「mod_rewrite」機能が実装されれば、処理を実行するようと言う指定です。レンタルサーバー等の業者の場合は、基本的には「mod_rewrite」機能が実装済の状態になっております。しかし、XAMPP-WordPress環境の場合は、Apacheの環境構成ファイル「httpd.conf」に mod_rewriteモジュールが組み込まれていない場合、パーマリンクは有効とはなりません。ですので、httpd.confをテキストエディターで開いて、確認した結果、Fig. htaccess-3 mod_rewriteの設定通り、モジュールが実装されています。

Fig. htaccess-3 mod_rewrite設定

そして、もう一つ重要な環境定義をチェックしなければならない箇所があります。それは次のFig. htaccess-4 AllowOverrideの設定は”All"になっているかのチェックポイントです。ここも問題がなさそうです。ということで、Apacheサーバー上の環境設定はOKのようです。

Fig. htaccess-4 AllowOverride設定

・3行目の「RewriteEngine On」は、ここからURLの変更を処理するよ、という宣言をします。

・4行目の記述コードは最も重要で注目すべきところです。内容を理解しないと、私のように1日以上掛かっても.htaccessが動作しないことになってしまいました。(追記コードの意味が理解しているなら、わずか5分でパーマリンク変更作業ができてしまいますよ)

ー まず、「RewriteRule」の意味について、RewriteRuleは、URLの書き換えを行うディレクティブです。「条件パターン」に一致する URL を、その後の「置換文字列」で書き換えます。URLを書き換えるためのルールを示しています。つまり、 「RewriteRule」 の後ろに具体的なURLの転送方法を明記するので、その記述通り処理しなさいよと言うことです。以下の書式になります。

RewriteRule 条件パターン  置換文字列  [フラグ]

ー 「^」の意味について、これは「.htaccess」ファイルの設置場所、つまり「WordPress」フォルダーから見て、その「ルートディレクトリ」或いは「localhost」のことを指します。レンタルサーバーの場合はドメイン名の「www.○○○.com」、XAMPP-WordPressの場合は、https://www.○○○.com/(=c:\xampp\htdocs)に相当します。なので、 「^」 は、つまり「https://www.○○○.com/wprdpress/」のことを代表しています。

ー 動かない追記コード

   RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ $4 [R=301,L]

   [0-9]{4} →数字4桁のYYYY、 ([0-9]{2} →数字2桁の MM、 [0-9]{2} →数字2桁の DD、 (.*) $ →すべての文字列を表す、 $4 →条件パターンにある四つの括弧中の四つ目の内容を表す。 [R=301,L] →恒久的なリダイレクトですよ。そしてLはLastのLを意味しています。

上記RewriteRuleコードを分析すると、 「https://www.○○○.com/wordpress/YYYY/MM/DD/post-99/」 と言う条件パターンを 「https://www.○○○.com/wordpress/ post-99/」 に置き換えなさいの意味になります。しかし、このルールでURLを転送すると、 「https://www.○○○.com/post-99/」 へ誘導してしまいました。

ー 正常に動く追記コード

  ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ /wordpress/$4 [R=301,L]

  上記コードのように、赤文字のコード/wordpress/を追加記入すると、「https://www.○○○.com/wordpress/post-99/」 へ誘導するようになりました。

ー </IfModule>、モジュールの処理はここまでですよ。と宣言します。

ー.htaccess301リダイレクトの実行結果を確認するために、ブラウザのキャッシュデータを一度クリアします。WordPressへ再ログインして、個々の記事ページの遷移状況を確認した結果正常に動作しました。

以上のパーマリンク途中変更内容は、あくまでも当サイトの個人のローカルPC環境での作業ですので、試して実施する場合は、自己責任でお願いします。