Htaccessリダイレクトジェネレータ

ブログを移行したり、URLスキーマを変更したり、古いページを統合するたびに、Apacheの.htaccessファイルがすべての整理作業の主な負担を担います。このジェネレータは、シンプルなソースとターゲットの対応関係を、適切なフラグを含む正しいRewriteRuleディレクティブに変換し、サイト内の.htaccessファイルに直接適用できる状態にします。

リダイレクトルールを生成する方法

  1. 1

    リダイレクトの種類を選択してください

    301はSEOに適した移行用の恒久的なリダイレクト、302はA/Bテストや季節ごとのリダイレクト用の一時的なリダイレクトです。

  2. 2

    ソースとターゲットを入力してください

    正確なパスまたは正規表現パターン。古いパスがRewriteRuleのパターンに、新しいURLがリダイレクト先になります。

  3. 3

    フラグを確認

    各ルールには自動的に正しいフラグ(`[R=301,L]`または`[R=302,L]`)が付き、そのままmod_rewriteで動作します。

  4. 4

    ディレクティブをコピー

    生成されたブロックは、.htaccessファイルの`<IfModule mod_rewrite.c>`セクション内に配置されます。

mod_rewrite と mod_alias のディレクティブ

Apacheではリダイレクト用に2つのモジュールを提供しています。ルールの複雑さに応じて選択してください。

選択ガイド

要件 使うもの
正確な旧URL → 正確な新URL Redirect Redirect 301 /old /new
ワイルドカードのプレフィックス RedirectMatch RedirectMatch 301 ^/blog/(.*)$ /articles/$1
クエリ文字列の一致 RewriteRule 下記を参照
HTTPSを強制する RewriteRule RewriteCond %{HTTPS} off + ルール
条件付き(ブラウザ、クッキー) RewriteRule RewriteCond と併用

例:wwwでHTTPSを強制する

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

例:/blog/post-123 を /articles/post-123 に移動します

RewriteEngine On
RewriteRule ^blog/(.*)$ /articles/$1 [L,R=301]

よく見るフラグ

  • L、最後のルール。それ以降のルールは処理しない。
  • R=301 または R=302、そのステータスコードでリダイレクトする。
  • NC、大文字・小文字を区別しない。
  • QSA、元のクエリ文字列を新しいURLに追加する。
  • NE、ターゲット内の特殊文字を再エンコードしない。

よくある間違い

  • RewriteEngine On を忘れる、これがないとRewriteRuleは一切効果を持ちません。
  • 既定で302を使う、Googleは一時的とみなすため、旧URLが順位を保持し続けます。
  • 連鎖リダイレクト(旧 → 中間 → 最終)、常に1回のホップで完結させることを目指してください。ホップが増えるたびにリンク評価が失われ、遅延も増加します。

よくある質問

恒久的な移行(サイトの移設、URLスラグの変更、HTTPSへのアップグレード)には301を使用してください。メンテナンスページへのルーティングやA/Bテストなどの一時的な状況には302のみを使用してください。検索エンジンは301でランキング情報を転送しますが、302では信頼性に欠ける場合があります。

最も一般的な原因は、パターン内の先頭のスラッシュを忘れることです。RewriteRuleでは、パターンは先頭のスラッシュを含まないパス(例:^blog/)と一致しますが、Redirect(mod_alias)ではパターンはスラッシュで始まります(例:/blog)。これら2つの規約を混同してはいけません。

はい、RewriteRuleの前にRewriteCond %{QUERY_STRING} ^id=123$を使用してください。単純なRedirectはクエリ文字列を読み取りません。RewriteRuleのみがクエリ文字列と一致できます。

はい、次のリクエスト時にApacheは各リクエストごとに.htaccessファイルを再読み込みします。サーバーの再起動は不要です。何の変化も見られない場合は、ディレクトリのvhostでAllowOverride Allが設定されているか確認してください。

関連ツール

このツールは他の言語でも利用できます