Apache mod_rewrite 特定の文字列を含まない条件を定義したい

Apache

mod_rewriteのRewriteCondで「特定の文字列を含まない」条件を定義してみました。
RewriteCondでは条件を正規表現で記述でき、正規表現の否定先読みや否定戻り読み機能を使うと「特定の文字列を含まない」条件を定義することができます。

今回はmod_rewriteでクエリーストリングに”action=login”が含まれる場合はHTTPS通信を、そうでない場合はHTTP通信を強制するように設定しました。
/action=(?!login)/という正規表現で”action=login”以外の”action=”にマッチする条件を定義できます。

このmod_rewrite設定は下記のようになりました。

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteCond %{QUERY_STRING} action=login
 RewriteRule ^.*$  https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
 RewriteCond %{HTTPS} on
 RewriteCond %{QUERY_STRING} action=(?!login)
 RewriteRule ^.*$  http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これで下記のような動作を設定できました。

  • HTTP通信時にクエリーストリングがaction=loginの場合はHTTPSにリダイレクトする
  • HTTPS通信時にクエリーストリングがlogin以外のactionの場合はHTTPにリダイレクトする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です