メインコンテンツへスキップ

.htaccess/Nginx リダイレクト生成

.htaccess と Nginx のリダイレクト設定をフォームから生成する無料オンラインツール。HTTPS 強制・www 統一・末尾スラッシュ・個別 301 を選ぶだけで Apache と Nginx 両方の記述を出力。ループや二重リダイレクトも警告します。

HTTPS 強制・www の統一・末尾スラッシュ・index.html の除去といった定番設定をチェックし、必要に応じて個別の転送ルールを行で追加すると、Apache の `.htaccess` と Nginx の設定を同じ内容で出力します。リダイレクトのループ、同じ転送元の重複、二重リダイレクトになる連鎖は入力時に警告します。

.htaccess/Nginx リダイレクト生成
// プリセット
// 共通設定
ドメイン
www の統一
末尾スラッシュ
// 個別リダイレクト
→

正規表現は Apache の RewriteRule / Nginx の rewrite に、それ以外は Redirect / location = に変換します。末尾の * は (.*) として扱います。

// 出力
RewriteEngine On

# HTTPS を強制 + www なしに統一
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

※ .htaccess が効かない場合は、Apache の設定で AllowOverride All と mod_rewrite の有効化を確認してください。

// .htaccess/Nginx リダイレクト生成の機能と特徴

301 と 302 の使い分け

301 は「恒久的に移転した」、302 は「一時的に別の場所にある」という意味です。検索エンジンは 301 を見ると旧 URL の評価を新 URL に引き継ぎますが、302 では旧 URL を残したまま扱います。**ページの移転・HTTPS 化・www の統一など、元に戻す予定のない転送はすべて 301** です。メンテナンス中の一時退避やA/Bテストのような一時的な転送だけ 302 を使います。307 と 308 はそれぞれ 302・301 の「メソッドを変えない」版で、POST リクエストを転送する API 用途以外では気にしなくて構いません。各コードの意味は HTTPステータスコード一覧 で確認できます。

.htaccess の書き方: Redirect と RewriteRule の違い

Apache には `Redirect` と `RewriteRule` の2通りの書き方があります。`Redirect 301 /old /new` は mod_alias の機能で、**前方一致の単純な置き換え**しかできない代わりに、mod_rewrite が無効でも動きます。`RewriteRule` は mod_rewrite の機能で、正規表現による柔軟なマッチングと、`RewriteCond` によるホスト名やプロトコルの条件分岐ができます。本ツールは転送元に正規表現が含まれない行は `Redirect`、含まれる行は `RewriteRule` で出力します。HTTPS 強制や www 統一は条件分岐が必要なので `RewriteCond` + `RewriteRule` になります。

HTTPS 強制と www 統一は1回の 301 にまとめる

`http://www.example.com/` へのアクセスを、まず `https://www.example.com/` に転送し、次に `https://example.com/` に転送すると、利用者は2回のリダイレクトを経由します。これは表示が遅くなるだけでなく、検索エンジンの評価の引き継ぎも弱まります。本ツールは HTTPS 強制と www 統一の両方を選んだ場合、**`[OR]` 条件でまとめて1回の 301 で正規 URL に飛ばす**記述を生成します。既存の設定を手直しするときも、転送先が最終的な URL になっているかを確認してください。

Nginx の 301 リダイレクトは if より server ブロック分割で

Nginx の `if` ディレクティブは、`location` 内で使うと想定外の動作をすることがあり、公式でも「If Is Evil」として注意喚起されています。HTTPS 強制や www 統一は、`server` ブロック自体を分けて `return 301` で転送するのが推奨される形です。本ツールの「Nginx」タブは手軽に貼れる `if` 形式、「Nginx (server分割)」タブは推奨形式を出力します。新規に設定するなら後者を使い、既存の `server` ブロックに `location` や SSL の設定を足してください。

ループと二重リダイレクトを事前に検出

`/a → /b` と `/b → /a` のようにループする設定を適用すると、ブラウザが「リダイレクトが繰り返されました」というエラーを出してページが開けなくなります。また `/a → /b` と `/b → /c` の連鎖は、`/a` へのアクセスが2回転送される二重リダイレクトになります。本ツールは個別リダイレクトの行を相互に照合し、ループ・連鎖・同じ転送元の重複を警告します。レスポンスヘッダーの `Location` を確認したい場合は HTTPヘッダ解析 が使えます。

// .htaccess/Nginx リダイレクト生成に関するよくある質問

.htaccess のリダイレクトが効かないときの確認点は?

まず Apache の設定で、そのディレクトリに対して `AllowOverride All`(少なくとも `FileInfo`)が指定されているか確認してください。`AllowOverride None` だと `.htaccess` は読まれません。次に `RewriteRule` を使う場合は mod_rewrite が有効である必要があります(`a2enmod rewrite` など)。それでも動かない場合は、ファイル名が `.htaccess` で先頭にドットがあるか、文字コードが UTF-8(BOM なし)か、改行コードが LF かも確認してください。

RewriteRule の正規表現 (.*) と $1 の書き方は?

転送元に `(.*)` と書くと「任意の文字列」にマッチし、その部分は転送先で `$1` として参照できます。たとえば `/blog/(.*)` → `/articles/$1` なら、`/blog/hello` は `/articles/hello` に転送されます。本ツールでは末尾の `*` だけでも `(.*)` と同じ意味に変換するので、`/old/*` → `/new/$1` のような書き方もできます。ドット `.` は任意の1文字を意味するため、ファイル名の `.html` を厳密にマッチさせたい場合は `\.html` と書きます。

末尾スラッシュは付けるべきですか、外すべきですか?

どちらでも構いませんが、**サイト内で統一されていること**が重要です。`/about` と `/about/` が両方で表示できると、検索エンジンには別の URL として扱われ、評価が分散します。ディレクトリ型の URL(`/about/index.html` が実体)なら付ける、ファイル型(`/about.html`)なら外すのが自然です。本ツールの「付ける」はファイル拡張子のある URL を除外し、「外す」は実在するディレクトリを除外するので、静的ファイルやディレクトリへのアクセスを壊しません。

ドメイン変更で旧ドメインから新ドメインへパスを維持して 301 転送したい

「サイト移転」プリセットを選ぶと、転送元 `/(.*)`、転送先 `https://new-example.com/$1` の行が入ります。転送先のドメインを実際の新ドメインに書き換えてください。この設定を**旧ドメイン側のサーバー**に置くと、`/old/page.html` へのアクセスは `https://new-example.com/old/page.html` に 301 で転送されます。Google Search Console の「アドレス変更」ツールも併用すると、移転が検索エンジンに伝わりやすくなります。

WordPress で使えますか?

使えます。WordPress は `.htaccess` の `# BEGIN WordPress` 〜 `# END WordPress` の間を自動で書き換えるため、生成した設定は**そのブロックより上**に置いてください。WordPress 自身のパーマリンク設定(`index.php` へのルーティング)は `[L]` フラグで処理を止めるので、先に自分のリダイレクトを評価させる必要があります。「WordPress」プリセットには、`?p=123` 形式の旧 URL やカテゴリ変更の例を入れてあります。

Nginx の設定はどこに貼ればよいですか?

「Nginx」タブの内容は、既存の `server { ... }` ブロックの中に貼ります。`location` ブロックの中ではなく、`server` の直下に置いてください。「Nginx (server分割)」タブの内容は `server` ブロックごと出力しているので、`/etc/nginx/sites-available/` などの設定ファイルに置き、SSL 証明書のパスを書き足します。貼った後は `nginx -t` で構文を確認し、問題なければ `nginx -s reload` で反映します。

301 リダイレクトがキャッシュされて変更が反映されません

ブラウザが 301 レスポンスをキャッシュしているのが原因です。301 は「恒久的」なので、ブラウザは次回から確認なしで転送先へ飛びます。検証中はブラウザのシークレットウィンドウを使うか、`curl -I https://example.com/old` のようにコマンドで確認すると、キャッシュの影響を受けません。本番で誤った 301 を配信してしまった場合、利用者側のキャッシュを消す手段はないため、設定変更の際は先に 302 で試してから 301 に切り替えると安全です。

転送元の大文字小文字は区別されますか?

Apache の `Redirect` と `RewriteRule` はどちらも既定で大文字小文字を区別します。区別したくない場合は `RewriteRule` に `[NC]` フラグを付けます。本ツールが生成する www 統一の `RewriteCond` にはホスト名の比較で `[NC]` を付けていますが、個別リダイレクトには付けていないため、必要なら手で `[R=301,L]` を `[R=301,L,NC]` に書き換えてください。Nginx の `rewrite` は `~*` ではなく既定で区別されます。

生成した設定に危険な記述は含まれませんか?

生成されるのは標準的な `RewriteCond` / `RewriteRule` / `Redirect` / `return` / `rewrite` だけで、サーバー設定を書き換えるような記述は含みません。ただし、転送先に正規表現の `$1` を使う行は入力値をそのまま出力するため、転送先として信頼できる URL だけを指定してください。適用前にステージング環境で動作を確認することを推奨します。

入力内容は外部に送信されますか?

いいえ、すべてブラウザ内で生成しています。社内システムのドメイン名、未公開の移転先、旧 URL の一覧など、外部に出したくない情報を含んでいてもサーバーには送信されません。

// .htaccess/Nginx リダイレクト生成の使い方

  1. プリセットか共通設定を選ぶ

    「HTTPS + www なし」などのプリセットから近いものを選ぶか、HTTPS 強制・www の統一・末尾スラッシュ・index.html の除去を個別にチェックします。www を統一する場合はドメイン名を入力してください。

  2. 個別リダイレクトを行で追加

    転送元と転送先を入力し、ステータスコードを選びます。`(.*)` や末尾の `*` を使うとパターンでまとめて転送できます。ループや連鎖があれば警告が出るので、転送先を直接の最終 URL に直してください。

  3. 出力形式を選んでコピー

    Apache なら `.htaccess` をそのまま保存できます。Nginx は `if` 形式と `server` 分割形式から選び、`server` ブロックに貼って `nginx -t` で確認してからリロードしてください。

カテゴリ ネットワーク