tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

mod_rewriteのRewriteRule、RewriteCondメモ

mod_rewriteについての忘れそうなものメモ

Redirectとの違い

  • Rewrite・・・URL書き換えない
  • Redirect・・・URL書き換える

書く場所

それぞれのおき場所、書き方はそれぞれ調べる

.htaccessよりはhttpd.confのほうが良いようです
http://jikkenjo.net/450.html

DirectoryとOptions

  • FollowSymLinks・・・シンボリックリンク経由でコンテンツにアクセスできるようにする
  • ExecCGI・・・CGIの実行を可能にする
  • ALL・・・すべて有効

ファイルを一覧表示させない

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

参考:http://yotsuba-system.com/ponta/archives/47

  • 期間指定(年末年始のみ)

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20071228
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <20080104

参考:http://gmt-24.net/archives/348


忘れないように書いたけど、頭全部は入りませんねw