mod_rewriteについての忘れそうなものメモ
Redirectとの違い
- Rewrite・・・URL書き換えない
- Redirect・・・URL書き換える
DirectoryとOptions
ファイルを一覧表示させない
Options -Indexes FollowSymLinks
※-(ハイフン)をつける
オプション例
オプション | 意味 | 説明 |
---|---|---|
[C] | Chain | 次のRewriteRuleと条件を結合する |
[F] | Frobidden | アクセス禁止(403-Forbidden)[L]フラグと同様、以降のルールは無視される |
[G] | Gone | 空になったURLを返す。クライアントには410を渡す |
[L] | Last | 条件にマッチした場合はそこで判定を終了する |
[NC] | No Case | 大文字小文字区別しない |
[NE] | No Escape | 書き換えの結果に対してURLエスケープしない |
[R] | Redirect | クライアントに302レスポンスを返してリダイレクト。[R=303]のようにリダイレクトコードも付加できる。[L]フラグと同様、以降のルールは無視される |
[E] | Enviroment | 環境変数の設定 |
[N] | Next | 書き換えが済んだURLを新たなリクエストとして書き換え処理最初のルールから繰り返す |
※他にも[P]やら[S]やら[QSA]などもあるようです
変数
RewriteRuleを適用する条件をRewriteCondとして追加できる
RewriteCond %{変数名} 正規表現 [オプション]
変数名に入る変数一覧
グループ | 変数名 | 説明 |
---|---|---|
ヘッダ環境変数 | HTTP_USER_AGENT | ユーザエージェント。WebブラウザとOSを特定できるような情報を格納している。 |
HTTP_REFERER | リンク元ページのURL(URL直入力やセキュリティソフトで遮断される場合有) | |
HTTP_COOKIE | クッキー情報 | |
HTTP_FORWARDED | アクセスしたユーザのプロキシ情報 | |
HTTP_HOST | サーバのホスト名 | |
HTTP_PROXY_CONNECTION | プロキシーを経由しているか、かな?(HTTP_PROXY_CONNECTION=Keep-Aliveとか入ってるらしい) | |
HTTP_ACCEPT | ブラウザの言語タイプ | |
リクエスト環境変数 | REMOTE_ADDR | アクセスしたユーザの端末のIPアドレス |
REMOTE_HOST | アクセスしたユーザのHOST名 | |
REMOTE_USER | アクセスしたユーザのユーザ名。BASIC認証などが行なわれる際に有効。 | |
REMOTE_IDENT | アクセスしたユーザのユーザID | |
REQUEST_METHOD | メソッド。POSTとかGETとか | |
SCRIPT_FILENAME | スクリプトの実パス上のファイル名 | |
PATH_INFO | URLの末尾に付加されたパス情報 | |
QUERY_STRING | GETメソッドで渡されたフォームパラメータ。URLの?以降に付加されたデータ | |
AUTH_TYPE | 認証タイプ | |
サーバー環境変数 | DOCUMENT_ROOT | ドキュメントルートフォルダ。サーバー上の絶対パス |
SERVER_ADMIN | サーバー管理者情報 | |
SERVER_NAME | サーバー名 | |
SERVER_ADDR | サーバーのアドレス | |
SERVER_PORT | サーバー側のポート番号 | |
SERVER_PROTOCOL | プロトコルバージョン | |
SERVER_SOFTWARE | サーバーのソフトウェア | |
システム日付・時刻変数 | TIME_YEAR | 年 |
TIME_MON | 月 | |
TIME_DAY | 日 | |
TIME_HOUR | 時 | |
TIME_MIN | 分 | |
TIME_SEC | 秒 | |
TIME_WDAY | 曜日 | |
TIME | 日時(秒?) | |
その他 | API_VERSION | |
THE_REQUEST | 要求されたリクエスト(GET / HTTP/1.1とか) | |
REQUEST_URI | 要求されたURL(URI) | |
REQUEST_FILENAME | ||
IS_SUBREQ |
TIME_YEARとかTIME_WDAYとか使ったことなかったけど
調べたら結構使えそうです。
日付指定、期間指定でアクセスをごにょごにょに使えるようです
以下、例)
- 日曜のみ
%{TIME_WDAY} =0
- 期間指定(年末年始のみ)
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20071228
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <20080104
忘れないように書いたけど、頭全部は入りませんねw