301 Redirect
Joomla! CoreのRedirect Pluginを使用して、旧URLから新URLへの301 Redirectを管理します。

 概要

  • 次のArticleを作成の際、当サイトのURLの規定方針を変更し、各ArticleのURLを変更することにしたため、永続的な転送処理である301 Redirectを設定して、旧URLへのリクエストを新URLへ転送することにしました
  • Joomla! Coreには、Redirect Pluginを使用したRedirects機能が用意されており、簡便に301 Redirectを管理することができます
  • ただし、当サイトでは機能そのものは問題なく動作したものの、旧URLの規定方針が原因で、結果的に利用することができませんでした

301 Redirect

  • Redirectとは、あるURLへのリクエストを別のURLに転送する技術です
  • Redirectには主に2つの方法があります
    • 301 Redirect: 永続的な転送
    • 302 Redirect: 一時的な転送
  • 301 Redirectは主に次の用途で利用されます
    • httpからhttpsへの転送
    • URLのwww有無の一本化
    • URLの変更: 本稿での利用目的になります
    • ドメインの変更
    • デバイス別のページ誘導: レスポンシブデザインが主流の昨今では利用することはなくなったようです

参照

 設定

  • WebサーバーApacheで稼働しているJoomla!のRedirectsの設定手順は次のとおりです
  1. Apacheのmod_rewriteの有効確認
  2. Apacheのhttpd.confの有効確認
  3. Joomla!のRedirect Pluginの有効化
  4. Joomla!でのRedirects: Linksの設定

参照

mod_rewriteの有効確認

  • コマンドラインにて確認します
  • Almalinuxではmod_rewriteはDefaultで有効のようです
$ sudo httpd -M | grep rewrite
 rewrite_module (shared)
  • 上記の表示であれば有効状態です
  • 参考までにmod_rewriteのロードは次のファイルで確認できます
$ sudo nano /etc/httpd/conf.modules.d/00-base.conf
51 LoadModule rewrite_module modules/mod_rewrite.so

httpd.confの有効確認

  • コマンドラインにてドキュメントルートのディレクティブでAllowOverrideがAllとなっているかを確認します
    • 通常、Apacheインストール時に設定済です
$ sudo nano /etc/httpd/conf/httpd.conf
136 <Directory "/var/www/html">
137     #
138     # Possible values for the Options directive are "None", "All",
139     # or any combination of:
140     #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
141     #
142     # Note that "MultiViews" must be named *explicitly* --- "Options All"
143     # doesn't give it to you.
144     #
145     # The Options directive is both complicated and important.  Please see
146     # http://httpd.apache.org/docs/2.4/mod/core.html#options
147     # for more information.
148     #
149     Options FollowSymLinks
150
151     #
152     # AllowOverride controls what directives may be placed in .htaccess files.
153     # It can be "All", "None", or any combination of the keywords:
154     #   Options FileInfo AuthConfig Limit
155     #
156     AllowOverride All
157
158     #
157
158     #
159     # Controls who can get stuff from this server.
160     #
161     Require all granted
162 </Directory>

Redirect Pluginの有効化

  1. System > Manage > Redirectsをクリックします
    System > Manage > Redirectsをクリック
  2. "The Redirect System Plugin is disabled."のリンクをクリックします
    The Redirect System Plugin is disabled.のリンクをクリック
  3. Edit Plugin Setteings dlg > Plugin tab > Status: Enabledに変更します
    Edit Plugin Setteings dlg > Plugin tab > Status: Enabledに変更
  4. Save & Closeをクリックします
    Save & Closeをクリック

Redirects: Linksの設定

  1. System > Manage > Redirectsをクリックします
    • 上記Redirect Pluginの有効化手順の直後であれば不要です
  2. + Newをクリックします
    + Newをクリック
  3. Redirect: NewウインドウのNew Link tabが開きます
    Expired URL, New URL, Commentを入力してSave & Closeをクリック
  4. Expired URL: 期限切れのURLを入力します
    • Expired URL: https://f-labs.jp/joomla/2025-07-07-09-19-54
  5. New URL: 転送先のURLを入力します
    • New URL: https://f-labs.jp/joomla/google-code-prettify
  6. Comment: 必要に応じて入力します
  7. Save & Closeをクリックします
  8. Redirects: Listへ登録されたことを確認します
    Redirects: Listへ登録されたことを確認Redirects: Listへ登録されたことを確認
  9. ブラウザで転送の動作確認をします

トラブル

  • 上記の設定で問題ないはずですが、転送されず404 Not Foundのページが表示されてしまいます
  • アドレスバーを確認すると表示されているURLの最後が/2025-07-07-09-19-54であるべきところが/2025で切れており、2025のハイフン以降が切り落とされています
    2025のハイフン以降が切り落とされている

テスト

  1. ハイフンを使用しない場合 - Expired URL: https://f-labs.jp/joomla/20250707091954
    • 転送できました
  2. 先頭に文字とハイフンを追加した場合 - Expired URL: https://f-labs.jp/joomla/a-2025-07-07-09-19-54
    • 転送できました
  3. 本来希望している設定 - Expired URL: https://f-labs.jp/joomla/2025-07-07-09-19-54
    • 転送できません
    • アドレスバーのURL: https://f-labs.jp/joomla/2025
    • 404 Not Foudページが表示されました

原因

  • 上記のCの原因はJoomla! CoreのRouting機能にあります
  • すなわちRedirects機能とは関係なく、Routing機能により2025がIDと認識され、2025の次のハイフン以降が切り落とされたものと思われます
    • 切り落される理由は解かりません
  • その結果、存在しないURLのため、404 Not Foudページ表示となりました
Remove IDs from URLsオプション
  • Joomla! CoreのRouting機能でArticle IDの付与を制御するオプションがあります
  • System > Component > Articles > Integration tab >  Routing blk > Remove IDs from URLs
    System > Component > Articles > Integration tab >  Routing blk > Remove IDs from URLs: Yes
  • YES: Article URLに付与するArticle IDを削除します
    • デフォルト値です
    • https://f-labs.jp/joomla/google-code-prettify
  • No: Article URLにArticle IDを付与します
    Remove IDs from URLs: NoArticle URLにArticle IDを付与
    • https://f-labs.jp/joomla/3-google-code-prettify
    • Remove IDs from URLs: Noの場合、テストCで転送可能となります
    • ただし、Routing機能により正しいURLはArticle IDが付与されていますので、結果404 Not Foudページ表示となります

原因を踏まえたRedirectsに対する当サイトの対応

  • 上記を踏まえた結論は、Redirect設定の見送りです
  • 理由は次のとおりです
    • そもそも旧URLから新URLへの転送を設定したいのですが、Joomla! CoreのRouting機能のためうまく転送されません
    • Remove IDs from URLs: Noとオプションを変更すると、訪問者にとって意味のないArticle IDが付与されたURLとなってしまいSEF URLsの理想に反します
    • 近い将来Google Searchのクロールが繰り返され、旧URLが新URLに入れ替われば、301 Redirectは不要とります
  • 合わせてGoogle Search Consoleにて旧URLのインデックス登録の削除依頼を進めます