307 Temporary Redirect を設定するその他の方法【HTMLリダイレクト、HTTPヘッダー、htaccessファイルなど】

2024-04-02

HTTPステータスコード 307 Temporary Redirect とは?

例:

  • サーバメンテナンス中
  • コンテンツの更新中
  • イベント開催期間中のみ別のURLで提供

307リダイレクトの特徴:

  • 一時的な移転であること
  • 元のURLへのアクセスが将来的に復活する可能性があること
  • SEO対策上、元のURLの権威性を維持できること
  • POSTメソッドなどのリクエストもリダイレクトされること

307リダイレクトと302 Foundの違い:

307 Temporary Redirect と 302 Found は、どちらもリダイレクトを指示するステータスコードですが、以下の点で違いがあります。

項目307 Temporary Redirect302 Found
移転の永続性一時的な移転永続的な移転
SEO対策元のURLの権威性を維持元のURLの権威性を移転先に譲渡
リクエストメソッドPOSTなどのリクエストもリダイレクトPOSTなどのリクエストはリダイレクトされない

307リダイレクトの使い分け:

  • コンテンツの移転が一時的な場合
  • SEO対策を重視する場合
  • POSTなどのリクエストもリダイレクトしたい場合

307リダイレクトの例:

  • サーバメンテナンス中に、ユーザーをメンテナンス告知ページへリダイレクトする
  • イベント開催期間中のみ、イベント特設ページへリダイレクトする
  • ログイン後のユーザーを、マイページへリダイレクトする

307リダイレクトの実装方法:

307リダイレクトは、Webサーバの設定ファイルやプログラムコードで実装できます。

Webサーバの設定ファイル:

# Apacheの場合
Redirect 307 /old-url /new-url

# Nginxの場合
rewrite ^/old-url$ /new-url permanent;

プログラムコード:

# Pythonの場合
from flask import redirect

@app.route("/old-url")
def old_url():
  return redirect("/new-url", code=307)


HTTPステータスコード 307 Temporary Redirect のサンプルコード

Python

from flask import redirect

@app.route("/old-url")
def old_url():
  return redirect("/new-url", code=307)

@app.route("/new-url")
def new_url():
  return "This is the new URL."

JavaScript

// JavaScriptで307リダイレクトを行う例

function redirect() {
  window.location.href = "/new-url";
  window.location.replace("/new-url"); // POSTリクエストもリダイレクトしたい場合
}

// リダイレクトを実行
redirect();

このコードは、JavaScriptを使って、/new-url へ307リダイレクトする例です。

Nginx

# Nginxの設定ファイル

server {
  listen 80;
  server_name localhost;

  location /old-url {
    rewrite ^/old-url$ /new-url permanent;
  }

  location /new-url {
    root /var/www/html;
    index index.html;
  }
}

この設定ファイルは、Nginxを使って、/old-url/new-url へ307リダイレクトする例です。

Apache

# Apacheの設定ファイル

<VirtualHost *:80>
  ServerName localhost

  Redirect 307 /old-url /new-url

  DocumentRoot /var/www/html

  <Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

この設定ファイルは、Apacheを使って、/old-url/new-url へ307リダイレクトする例です。

上記以外にも、様々な言語やフレームワークで307リダイレクトを実装することができます。



HTTPステータスコード 307 Temporary Redirect を実装するその他の方法

HTMLリダイレクト

HTMLの <meta> タグを使って、307リダイレクトを設定することができます。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="refresh" content="0; URL=/new-url">
  <title>307 Temporary Redirect</title>
</head>
<body>
  <h1>This page has been temporarily moved to <a href="/new-url">here</a>.</h1>
</body>
</html>

このコードは、3秒後に /new-url へ自動的にリダイレクトする例です。

HTTPヘッダーに Location フィールドを追加することで、307リダイレクトを設定することができます。

# Pythonの場合
from flask import Response

@app.route("/old-url")
def old_url():
  headers = {"Location": "/new-url"}
  return Response(status=307, headers=headers)

このコードは、Flaskフレームワークを使って、/old-url/new-url へ307リダイレクトする例です。

.htaccess ファイル

Apacheを使っている場合は、.htaccess ファイルを使って307リダイレクトを設定することができます。

# .htaccessファイル

Redirect 307 /old-url /new-url

このコードは、/old-url/new-url へ307リダイレクトする例です。