アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

mod_rewriteについて調べたやつまとめ

mod_rewriteについて調べる機会があったのでメモ…っていうかリンク集みたいになってる。
業務的にはわたしはApacheいじれる立場ではないので、上司から依頼されて調べたやつのまとめって感じですが…

mod_rewriteとは

Webサーバーの拡張機能
Webサーバー内でURLの書き換えを行う。リダイレクト。
例えば以下のようなことができる。

  • 特定IPからのアクセスのみ許可
  • ある時間帯だけメンテナンス画面へリダイレクト

.htaccessによるリダイレクト徹底解説
http://www.cherrypieweb.com/weblog/technical/20131017121752.php

マニュアル
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
英語つらい

基本の使い方

Apachemod_rewriteモジュールの使い方を徹底的に解説
http://oxynotes.com/?p=7392

全てのWeb担に捧げるRewrite設定集
http://www.techscore.com/blog/2014/12/16/%E5%85%A8%E3%81%A6%E3%81%AEweb%E6%8B%85%E3%81%AB%E6%8D%A7%E3%81%92%E3%82%8Bwrite%E8%A8%AD%E5%AE%9A%E9%9B%86/
・自社以外の接続はメンテナンスページに飛ばしたい
・URLをwwwありに統一したい(URLの正規化)
・必ずHTTPSで接続させたい
スマホガラケーは専用のページに振り分けたい
・ページが存在しない場合、404ページに飛ばしたい

環境変数

調べるといろいろな方法があるように見えたが、
とりあえずこんな感じで動いた。

# X_HOGEに1をセット
RewriteRule ^ - [E=X_HOGE:1]

# X_HOGEが1なら/index.htmlへリダイレクト
RewriteCond %{ENV:X_HOGE} 1
RewriteRule ^(.*)$ /index.html [L]

mod_rewriteApache環境変数を一時変数として利用する
http://qiita.com/hkusu/items/0caa921ad4fb1cb9d300
スマートフォンまたはFacebookクローラからのアクセスである場合は、それぞれ表示するロゴや適用するCSSを変更する
・静的リソースに対するアクセスの場合は、ローカルサーバに無い画像をAmazon S3 から取得する(リバースプロキシ)

mod_rewriteのRewriteCondで、SetEnvIfの環境変数を利用する
http://netmark.jp/2009/03/mod-rewriterewritecondsetenvif.html/comment-page-1

mod_rewrite で独自の変数を使う方法
http://www.sssg.org/blogs/naoya/archives/2053
・変数に値をセット・変数の値を利用

ApacheのSetEnvで設定した環境変数は、RewriteCond,SetEnvIfでは参照できない
http://server-setting.info/centos/setenv-rewritecond-dont-work.html
(↑で問題になってたのはこのこと?)
・RewriteCond,SetEnvIfでは参照できないことの確認と回避方法

cookie

とりあえずこんな感じで動いた。

# hogeが「空であれば」hogeに1をセット(ドメイン指定なし)
# なんでこの書き方で「空であれば」になるかは分からない。
RewriteCond %{HTTP_COOKIE} !hoge= [OR]
RewriteRule ^ - [CO=hoge:1:;]

# hogeが1であれば/index.htmlにリダイレクト
RewriteCond %{HTTP_COOKIE} hoge=1
RewriteRule ^(.*)$ /index.html [L]

mod_rewriteで特定のクエリーストリングをcookieに変換するメモ
http://www.teradas.net/archives/6213/

(Un)setting a cookie in mod_rewrite
http://stackoverflow.com/questions/10000587/unsetting-a-cookie-in-mod-rewrite
英語だが、ドメインを指定したくないときどうすんの?的な話だと思う