コンテンツにスキップ

ルーティング: URL リライトと SSI

このページでは、URL を内部で書き換える「リライト機能」と、HTML 内に他ファイルの内容を取り込む「SSI(Server Side Include)」を説明します。サイト移行時の旧 URL 対応や、ヘッダ・フッタの共通化に活用します。

このページは ルート設定 の続きです。

URL リライト(RewriteRule)

リライト機能は、リクエスト URL のパターンマッチと書き換え・リダイレクトを設定する仕組みです。

1 つのルートに複数のリライトルールを登録でき、登録順に評価されます。

URL リライト設定画面

リライトルールの設定

項目 説明 必須
ルート名 このルールの識別名 いいえ
パターン マッチする URL の正規表現 はい
アクション マッチ時の動作 はい
リライト URL 転送先 URL アクションによる
備考 メモ・説明(最大 512 文字) いいえ

アクション一覧

アクション HTTP ステータス 説明 リライト URL
200 200 OK 内部フォワード(URL を変えずに別パスへ) 必須(/ で始まる相対パス)
301 301 Moved Permanently 恒久的リダイレクト 必須
302 302 Found 一時的リダイレクト 必須
403 403 Forbidden アクセス拒否 不要
410 410 Gone リソース削除済み 不要

キャプチャ参照

パターンの正規表現グループを、リライト URL から $1 $2 ... で参照できます。

パターン:     /old-blog/(.*)
リライト URL: /new-blog/$1

/old-blog/my-article/new-blog/my-article に転送されます。

%{変数名} を使うと、条件で参照した変数値も利用できます。

リライト条件(RewriteCond)

リライトルールに条件を追加できます。複数の条件を組み合わせて、特定のリクエストにのみルールを適用する用途で使います。

条件の設定項目

項目 説明 必須
条件タイプ 評価対象の変数(最大 64 文字) はい
条件値 マッチング条件(最大 4096 文字) はい
論理演算 次の条件との結合(AND / OR) はい

利用できる変数(条件タイプ)

リクエストヘッダ:

変数 内容
%{HTTP_USER_AGENT} ブラウザのユーザーエージェント
%{HTTP_REFERER} リファラー URL
%{HTTP_COOKIE} Cookie
%{HTTP_HOST} Host ヘッダ
%{HTTP_ACCEPT} Accept ヘッダ
%{HTTP:Accept-Language} Accept-Language
%{HTTP:X-Forwarded-For} X-Forwarded-For
%{HTTP:X-Forwarded-Host} X-Forwarded-Host
%{HTTP_PROXY_CONNECTION} プロキシ接続ヘッダ

リクエスト情報:

変数 内容
%{REMOTE_ADDR} クライアント IP アドレス
%{REQUEST_METHOD} HTTP メソッド
%{REQUEST_URI} リクエスト URI
%{PATH_INFO} URL のパス部分
%{QUERY_STRING} クエリストリング
%{SERVER_NAME} サーバーホスト名
%{SERVER_PORT} サーバーポート番号
%{HTTPS} HTTPS 接続時は on、それ以外は off

日時:

変数 範囲
%{TIME_YEAR} 4 桁の年(例: 2026)
%{TIME_MON} 月(01〜12)
%{TIME_DAY} 日(01〜31)
%{TIME_HOUR} 時(00〜23)
%{TIME_MIN} 分(00〜59)
%{TIME_SEC} 秒(00〜59)
%{TIME_WDAY} 曜日(1=日 〜 7=土)
%{TIME} UNIX タイムスタンプ(ミリ秒)

条件値の書き方

正規表現でのマッチ:

.*iPhone.*           # User-Agent に iPhone を含む
^Mozilla.*           # Mozilla で始まる

正規表現は大文字・小文字を区別しません。

比較演算子:

演算子 意味
== 等しい ==on
!= または <> 等しくない !=off
<<= より小さい・以下 <100
>>= より大きい・以上 >=2026

AND と OR の評価

複数条件を組み合わせる場合の評価ルールは以下の通りです。

  • 連続する OR 条件を先にグループ化して評価
  • OR グループ間は AND で結合

例: 条件 A(AND), B(OR), C(AND), D の場合は (A) AND (B OR C) AND (D) として評価されます。

リライトルールの設定例

例 1: スマートフォン向けにリダイレクト

パターン:      /(.*)
アクション:    302
リライト URL:  /sp/$1
条件:          %{HTTP_USER_AGENT} = .*iPhone.*  [OR]
               %{HTTP_USER_AGENT} = .*Android.*

例 2: 深夜帯にメンテナンスページ

パターン:      /.*
アクション:    200
リライト URL:  /maintenance.html
条件:          %{TIME_HOUR} >= 02  [AND]
               %{TIME_HOUR} <= 05

例 3: 旧 URL からの恒久リダイレクト

パターン:      /old-path/(.*)
アクション:    301
リライト URL:  /new-path/$1

バリデーション

入力時に以下のルールでチェックされます。

  • パターン — 必須・有効な正規表現
  • アクション — 200 / 301 / 302 / 403 / 410 のいずれか
  • リライト URL — 200 / 301 / 302 で必須、最大 512 文字。200 の場合は / で始まる相対パス
  • 条件タイプ — 最大 64 文字
  • 条件値 — 最大 4096 文字、有効な正規表現

SSI(Server Side Include)

SSI は、HTML ページ内に他のファイルの内容を埋め込む機能です。ヘッダ・フッタなど、複数ページで共通の部品を 1 ヶ所で管理する用途に使います。

インクルードの設定

  1. エディタ画面のツールバーで インクルード ボタンをクリックします。
  2. インクルード対象のファイルを指定します。
  3. 必要に応じてデータ取得用のクエリ(後述)を設定します。
  4. 保存します。

インクルードの設定項目

項目 説明 必須
名前 このインクルードの識別名(最大 64 文字、英数字) はい
テンプレート インクルードする HTML ファイルのパス はい
クエリ データ取得用のクエリ(JSON 形式) いいえ

インクルードのタイプ

タイプ 説明
class CSS クラスセレクターで対象要素を選び、その内側を差し替え
type スクリプト実行位置 (script position) を指定してインクルード
fragment フラグメントセレクターで対象要素を選び、HTML を差し込み

インクルードのバリデーション

設定後、編集画面の バリデーション ボタンで設定内容を検証できます。テンプレートのパスが存在しない、クエリ構文が不正、などの問題を保存前にチェックできます。

次に読むページ