2021.07.29 - Note

RewriteCond RewriteRuleの書き方

Tag:

参考

htaccess tester
.htaccess 使い方 RewriteCond 書式 変数名 一覧 – ネットワークサービス 設定
RewriteRuleディレクティブ:URLのリライト/リダイレクトを行う

説明

RewriteCond 判定
RewriteCond 判定
RewriteCond 判定
RewriteRule 一致した場合のURL置換ルール

リダイレクトとリライト

リライトはブラウザのアドレスバーのURLは元のまま、参照先のみが変わる

# リライト
RewriteRule ^index\.html$ /new/index.html

# リダイレクト
RewriteRule ^index\.html$ /new/index.html [R=301]

# リダイレクト(別のドメインの場合)
RewriteRule ^index\.html$ http://www.example.com/

書き方

RewriteCond [対象] [判定] (オプション)
RewriteRule [対象2] [結果] (オプション)

対象2の値
通常
https://test.com/new/4/?time=986
VirtualHost ディレクティブ内の場合

https://test.com/new/4/?time=986
.htaccessがサブディレクトリ内の場合(blog内)
https://test.com/blog/new/4/?time=986

変数

変数名 %{○○} 意味 値の例
HTTP_USER_AGENT ユーザーエージェント
HTTP_REFERER 参照元URL
HTTP_COOKIE クッキー情報
HTTP_FORWARDED プロキシ情報
HTTP_HOST サーバーのホスト名 test.com
HTTP_PROXY_CONNECTION プロキシを経由しているか否か
HTTP_ACCEPT ブラウザの言語タイプ
DOCUMENT_ROOT ドキュメントルートのパス
SERVER_ADMIN サーバー管理者情報
SERVER_NAME サーバー名
SERVER_ADDR サーバーのアドレス
SERVER_PORT サーバーのポート番号
SERVER_PROTOCOL プロトコルバージョン
プロトコルバージョン サーバーソフトウェア
REMOTE_ADDR リモートアドレス
REMOTE_HOST リモートホスト名
REMOTE_USER リモートユーザー名 (基本認証利用時)
REMOTE_IDENT リモートユーザーのID
REQUEST_METHOD リクエストメソッド
SCRIPT_FILENAME スクリプトファイル名
PATH_INFO パス情報
QUERY_STRING クエリ文字列 time=986
AUTH_TYPE 認証タイプ
TIME_YEAR 2021
TIME_MON 07
TIME_DAY 29
TIME_HOUR 08
TIME_MIN 15
TIME_SEC 28
TIME_WDAY 曜日 (0:日 ~ 6:土) 4
TIME 年月日時分秒 (例:20130123123456) 20210729071358
API_VERSION APIバージョン
THE_REQUEST リクエスト文字列
REQUEST_URI リクエストURI new/4/?time=986
REQUEST_FILENAME リクエストされたファイル名
IS_SUBREQ サブリクエストか否か
HTTPS HTTPSでのアクセスか否か on / off

RewriteCond 条件パターン

パターン 意味 使用例
正規表現 ()で括った部分はRewriteRuleで%1で参照できる (ab).+
! 否定 !(ab|cd)
< テスト文字列より上の場合true <67
> テスト文字列より下の場合true >3
= テスト文字列と等しい場合true
<= テスト文字列以上の場合true
>= テスト文字列以下の場合true
-d ディレクトリが存在すればtrue -d
-f ファイルが存在すればtrue -f
-eq 「=」と同義
-ge 「<=」と同義
-gt 「<」と同義
-le 「>=」と同義
-lt 「>」と同義
-F (is existing file, via subrequest)アクセス可能な有効なパスを指している場合にtrue (内部サブリクエストを用いてcheckされる)
-l (is symbolic link)シンボルリンク(-H、-Lも同じ意味。ちなみに小文字エルです)
-s (is regular file, with size)ファイルが存在し、サイズが0でなければtrue
-U (is existing URL, via subrequest)アクセス可能な有効なURLとなっている場合にtrue
-x (has executable permissions)実行権限がある場合にtrue

オプション

RewriteCondでの判定結果を使う「%1」
RewriteRuleでの判定結果を使う「$1」

記載例

# httpsにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

# wwwにリダイレクト
RewriteCond %{HTTP_HOST} ^(?!www\.).+$
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# www無しにリダイレクト
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

#全てのアクセスを別ドメインの同じパスへリダイレクト
RewriteRule ^ https://new.net/%{REQUEST_URI} [R=301,L]

#全てのアクセスを別ドメインのトップへリダイレクト
RewriteRule ^ https://new.net/ [R=301,L]

#https://old.net/aaa → https://new.net に下層を残して転送
RewriteCond %{REQUEST_URI} ^/aaa(.*)$
RewriteRule ^ https://new.net%1 [R=301,L]

コメントを残す