SOFTELメモ

</> 技術者募集

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文のようなものはないようです。

「拒否をする(ただし環境変数がこうなっているとき)」
「ヘッダを出す(この環境変数があるとき)」
など、
何らかのアクションに条件が付随している感じです。

関連するメモ

コメント