.htaccessで301リダイレクトする方法:一つのHTMLを移す見本

Webサイト・SEO · 実務ガイド
.htaccessで301リダイレクトする方法:一つのHTMLを移す見本
Apacheの.htaccessでURLの転送を設定したい制作担当者向けです。.htaccessは、許可されたApache環境でディレクトリごとの設定を指定するファイルです。
旧HTML一つを新HTML一つへ移す完成コードと、macOSの隔離ローカル見本を示します。読後は、一行の意味・応答・対象外・戻し方を確かめた設定表を作れます。

この記事でできるようになること
- RedirectMatchの一行を読み分けられる
- 隔離見本で旧新と対象外の応答を確認できる
- 効かない・500・ループを設定とログで区別できる
01 / Webサイト・SEO
.htaccessは、Apacheの限られた場所に効く設定です
Apacheで許可されているとき、置いたディレクトリとその下に設定を適用します。

URLを変えずに文章を更新するだけなら、301の設定は不要です。永続的な移転が必要なら、同じ役割の旧新URLを対応させ、現在の転送場所を確認します。Apacheの.htaccessで設定が許可され、ファイルを扱う担当がいる場合に、本稿の方法が候補になります。WordPress内で管理する既存機能がある場合や、上流の配信側が転送する場合は、同じ一対を別の場所へ重ねないようにします。
ファイル名の先頭にドットがある.htaccessは、Apacheがディレクトリごとの設定を読むためのファイルです。単にHTMLを置くのと違い、設定の書き方とサーバー側の許可が必要です。Apacheの公式資料は、AllowOverrideなどにより使える命令が決まると説明しています。Noneなら.htaccessは無視されます。
NGINX、ホスティングの独自管理画面、CDN(複数の配信拠点から画像やページなどを届ける仕組み)の転送などでは、同じファイルを置いても機能しない場合があります。WordPressでも、サーバーがApacheか、設定が許可されているかを確認します。サーバーの主設定を管理できる場合は、公式資料が主設定を使う選択を説明しています。.htaccessが全ての環境で最適という意味ではありません。
本稿では、Apacheのmod_aliasで旧HTML一つを新HTMLへ301転送する例を扱います。サイト全体のHTTPS化、複雑なパスの書換え、WordPressのパーマリンクの一括変更は含みません。元のCMSが生成した設定を全て置き換える方法ではなく、適用できる一対を試し場所で確認します。
Apacheとmod_alias・許可・設定の場所を管理担当へ確認してください。
02 / Webサイト・SEO
旧HTML一つを、新HTML一つへ転送します
RedirectMatchで旧パスを正確に一致させ、301と新URLを指定します。

次の一行は、/old-guide.htmlだけを/new-guide.htmlへ移す学習例です。^はパスの始まり、$は終わり、\.は点そのものを示します。RedirectMatchは正規表現を使います。旧パス一つを対象にするため、前後を指定しています。301は永続転送の番号で、移転先は例のローカルURLです。
Redirect命令はパスの先頭が一致すると、後ろのパスも転送先へ付ける仕組みがあります。例えばディレクトリを移す場合に使えますが、一つのファイルだけに限定したい例とは目的が違います。RedirectMatchとmod_rewriteのRewriteRuleでも書き方が違うため、別の記事の行を混ぜて並べないでください。
設定にはHTTP(ブラウザーとサーバーが要求と応答をやり取りする決まり)の要求に付くクエリ(URLの?の後ろで追加の条件を渡す部分)も関係します。この例で?campaign=mailが付くと、新URLにも同じ値が渡る応答をローカル実行で確認しました。値を削る、別の条件で一致させるなどの目的がある場合は、この一行の意味とは別です。入力や決済を送るPOST(入力などのデータをサーバーへ送る要求)、API(プログラム同士が情報や処理をやり取りする窓口)の移転へそのまま使わず、要求の種類を担当と確かめます。
旧新の一対を確認し、設定の四部分を読めるようにしてください。
03 / Webサイト・SEO
隔離したフォルダーで、完成見本を実行します
既存Apacheが使えるmacOSの例では、独自の設定ファイルで127.0.0.1だけを待ち受けます。

このローカル見本は、macOSで/usr/sbin/httpdと指定したモジュールが既に使える場合に限ります。Linuxなどでは実行ファイルやモジュールの場所が違います。ない場合に本番やOSの設定を変更して合わせる方法ではありません。管理担当が用意したApacheの試し環境を使ってください。
/tmp/redirect-demoにhttpd.conf、wwwの中に.htaccess、old-guide.html、new-guide.html、other.htmlを用意します。三つのHTMLにはそれぞれ旧準備案内、新準備案内、対象外の案内を置きます。バックアップは公開するwwwの外へ保存します。次のhttpd.confは、独自のフォルダーと127.0.0.1:8770を使い、通常のApacheサービスの設定を編集しない例です。
ターミナルで/usr/sbin/httpd -t -f /tmp/redirect-demo/httpd.confを実行し、構文の確認が通るかを見ます。次に/usr/sbin/httpd -X -f /tmp/redirect-demo/httpd.confで試しサーバーを起動します。同じポートを別のアプリが使う場合は、そのアプリを止めず、この例のListenと転送先のポートを一緒に変更します。確認後は、この起動したターミナルでCtrl+Cを使って終了します。
適用条件が合う試し環境でファイルを用意し、構文確認後に独自設定で起動してください。
04 / Webサイト・SEO
旧・新・対象外の応答を同じ条件で比べます
旧301、新200、対象外200を確認し、旧パスに似た別URLへ広がっていないかも見ます。

ブラウザでhttp://127.0.0.1:8770/old-guide.htmlを開きます。ChromeのNetworkを先に開き、転送の記録を残して、旧DocumentのStatusとLocation、新DocumentのStatusを確認します。アドレスが新URLへ変わったことだけでは、301か302かは分かりません。新ページの本文が同じ準備案内になっているかも確認します。
この執筆時には、隔離したApache 2.4.67で同じ一行を実行しました。旧HTMLは変更前200、変更後301と新URLのLocation、新HTML200、other.html200を記録しました。/old-guide.html/extraは404で、この正確な一致に含まれません。これはローカルの例の記録であり、読者のサーバーの動作や検索順位を確認した実績ではありません。
変更前の内容へ.htaccessを戻すと旧HTMLが200へ戻ることも確認しました。実際のサイトでは、既存ルール、上位ディレクトリ、配信のキャッシュが関係するため、同じ結果が出るかを試し環境で見ます。結果表は自分が開いたURLと応答で埋め、例の番号をそのまま確認済みの記録としてコピーしないでください。
| 段階とURL | 記録した応答 | 読み取れること |
|---|---|---|
| 変更前 old-guide.html | 200 | 元のHTMLを返す |
| 変更後 old-guide.html | 301、Location=new-guide.html | 一対の転送が返る |
| 変更後 new-guide.html | 200 | 行き先の本文を返す |
| 変更後 other.html | 200 | このルールの対象外 |
| 変更後 old-guide.html/extra | 404 | 旧ファイルだけに一致 |
| 変更前へ戻した old-guide.html | 200 | 例の変更を戻せる |
旧・新・対象外・似たパスを開き、StatusとLocationを結果表に記してください。
05 / Webサイト・SEO
効かない・500・ループを、設定とログで分けます
不良の種類ごとに、許可、構文、一致、既存ルールを調べます。

何も変わらないときは、.htaccess.txtになっていないか、DocumentRootと置いた場所が合うか、AllowOverrideで命令が許されるかを確認します。サーバーがApacheではない場合、書き方を変えても同じファイルの設定は動きません。上流で既に転送されているなら、WordPressや静的ファイルへ要求が届く前に結果が変わることもあります。
500が返る場合は、変更したファイルを変更前の保存へ戻し、エラーログを読みます。公式資料は、許可されない命令や構文の誤りなどをログで確認する方法を説明しています。分からないまま権限を広げる設定や、全ての命令を許す変更へ進めないでください。どの行を加え、何が返ったかを担当へ渡します。
往復する場合は、旧→新と新→旧の両方がないかを確認します。途中で別のURLへ進む場合は、連続転送と既存の規則を調べます。WordPressが生成するBEGIN/ENDの区間などを、今回の一行のために削除しません。設定を置く位置や既存命令との関係は、現在の環境に合わせて担当が確認します。
| 条件 | 理由 | 先に行うこと |
|---|---|---|
| Apacheか不明 | 設定方式が違う可能性 | 管理担当に環境を確認 |
| 戻す権限と保存がない | 不良時に復旧できない | 保存と復旧の担当を確認 |
| 新URLが404 | 移転先に答えがない | 新ページを先に準備 |
| POSTやAPIのURL | メソッド等の条件が違う | 要求の仕様を個別確認 |
不良が出たら変更前へ戻し、URL・番号・ログの該当行を管理担当へ渡してください。
06 / Webサイト・SEO
まとめ:一行の意味と、戻せる結果を確認します
環境・一致・行き先を確かめ、対象外と復旧も含めて一対を確認します。

この設定の完成条件は、ファイルを作ったことではなく、意図した旧URLだけが同じ回答の新URLへ301で進むことです。新の200、対象外の正常表示、似たパスの扱いを確認します。旧HTMLが存在しない実際の移転では、変更前に必ず200とは限りません。変更前の状態は実測して記録してください。
本番の変更では、隔離した見本と既存サイトの条件が同じかを担当が確かめます。契約上の設定方法、WordPressの自動生成、上位の転送、必要なクエリなどの違いがあれば、そのままコピーしません。適用する一対の対応表と、変更前の保存が相談の具体物になります。
URLを変える必要がない本文更新なら、今回の設定を加える必要もありません。移転が必要な一対だけを確認し、設定の維持とサイト内リンクの更新へ進みます。本稿のローカル実行記録は仕組みの見本であり、検索結果や自社の本番設定を確認したものではありません。
設定表と試し結果、変更前の保存を管理担当へ渡して、本番で必要な変更を計画してください。
仕事の流れから、顧客との接点まで。
一体で見直す、最初の一歩を。


