|
Ads基本 †RewriteEngine on して、変換する条件がある場合は RewriteCond を並べて、RewriteRule で実行する変換を書く。 RewriteCond や RewriteRule には沢山オプションがあり、それにより効果も色々変わるので慣れるまでは複雑怪奇。 でも分かってしまえばこれほど何でも出来る道具は無いってくらいいろんなことが rewrite だけで出来るようになる。 例 †クッキーを見てリダイレクトさせる。 †/auth-area/ 以下のアクセスで、login というクッキーが無い場合はログイン画面(/login.php)に飛ばすようにするには以下のように書けば良いと思う。 RewriteEngine on RewriteBase /auth-area/ RewriteCond %{HTTP_COOKIE} !login= RewriteRule ^.*$ /login.php [R] /~user/ を suexec を利用可能にしたまま /user/ でアクセス出来るようにする。 †
user.example.com で example.com/~user/ にアクセスさせる。 †RewriteCond や RewriteRule では %{変数名} という形で環境変数を扱うことも出来る。 あと覚えておくと便利なのは RewriteRule の正規表現で出来た文字グループは $1 とかで変換後の文字列に埋めこめられるが、 同じように RewriteCond の正規表現で出来たグループも %1 とかで参照できるのだ。 これらを使うと以下のようなことが出来る。 RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.example\.com$ RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9_-]+)\.example\.com$ RewriteRule ^/(.*)$ /~%1/$1 [PT] これは example.com/~user/ の代わりに user.example.com でアクセスさせる例です。 www.example.com は書き換え対象から外したければ否定を表す ! を付けた RewriteCond を付けてやるなど工夫出来る。 /pukiwiki/?mod_rewrite を /pukiwiki/mod_rewrite のようにアクセスさせる †要は PukiWiki のページを ? 無しでアクセスさせたかったわけだが。 pukiwiki/.htaccess を次のような内容で作成することで出来た。 RewriteEngine on RewriteRule ^([^\?\./]+)$ ?$1
あぁ…。 でも、pukiwiki のリンクを ? 無しにするのがしんどそうだ…。 20箇所くらい修正しなきゃならんぽ。 しかも、plugin にも修正箇所が及ぶので cvs up とかする度に保守しないといけなさそうだ。 諦めようかな(^^; 一応、pukiwiki ディレクトリで次のコマンド一発で変換できるかな? find -type f -name \*.php -exec perl -i -pe 's/\$script\?([^=]*)$/\$script$1/g' {} \; 戻すのは面倒くさそうなので考えないことにする。 mod_rewriteでRBLを使ったアクセス制御を行う †RBLを使ったアクセス制限をしたかったんだが、apache標準ではそういうモジュールは存在せず、第3者による実装モジュールやパッチも存在するがapacheのバージョンにより使えるモジュールやパッチがまちまちなので、何とかバージョン共通でコピペで使える方法が無いか考とえたアイデアの一つがこの mod_rewrite を使ったやり方です。 その方法とは外部プログラムを使って RewriteMap を定義して、それに REMOTE_ADDR を渡してアクセス元が SPAM か HAM かチェックするというものです。 HTTP_X_FORWARDED_FOR を RewriteCond で使うには? †CGI 等では X_FORWARDED_FOR という環境変数で X-Forwarded-For ヘッダにアクセスできるので、そのノリで %{HTTP_X_FORWARDED_FOR} にマッチさせてやれば良いかと思ったがこれでは取れないようだ。他に %{ENV:HTTP_X_FORWARDED_FOR} でも駄目なようだ。 正解は以下のようにしてやればよいということが分ったのでメモ。 RewriteCond %{HTTP:X-Forwarded-For} !^192\.168\. 参考リンク † |