mod_rewriteでURLによって環境変数をセットして条件分岐に利用する
問題
特定の機能のURLにアクセスされたら、レスポンスをキャッシュさせたいので、ヘッダを書き換えたいです。
.htaccess で できますか。
答え
例えばこんなことはできる。
RewriteCond %{QUERY_STRING} menu=hoge&submenu=fuga RewriteRule ^.*$ - [E=X_nocache:1] Header set Cache-Control "private, max-age=36000" env=X_nocache Header unset Expires env=X_nocache
特定の引数がついていたら、
URLは書き換えずに、環境変数はセットして、
環境変数がセットされていたら、ヘッダを変えて、 Cache-Control をセットしたり、Expires を削除したりする。
RewriteCondの書き方は状況に応じて調整されたし。
全部 index.php に Rewrite している場合などでは、条件の書き方を考えなくてはならないかも。
以下のディレクティブで環境変数をセットすることができ
BrowserMatch BrowserMatchNoCase PassEnv RewriteRule SetEnv SetEnvIf SetEnvIfNoCase UnsetEnv
環境変数を使う側には以下があり
Allow CustomLog Deny ExtFilterDefine Header LogFormat RewriteCond RewriteRule
環境変数は、許可、拒否、ヘッダー書き換え、URL書き換えなどに使用することができる。
汎用的なif文のようなディレクティブがあるとプログラムっぽいことができそうなのが、何もしないただのif文のようなものはないようです。
「拒否をする(ただし環境変数がこうなっているとき)」
「ヘッダを出す(この環境変数があるとき)」
など、
何らかのアクションに条件が付随している感じです。
コメント