久々にhtaccessでのmod_rewriteをやりまして少しハマった(忘れていたのでポイントを)
このネタではタグつけて結構書いてますね・・
http://skill-up-engineering.com/tag/rewrite/
Contents
キャッシュクリア
・mod_rewriteはキャッシュがきいてしまい書き換えが正常に起こっているかわからないのでブラウザでOFFにしましょう。
ChromeのDeveloper Toolsを開き、画面右上の三点マーク→SettingからNetWorkのDisable cacheにチェックを入れます。(スクショ参照)
Chrome で 301 リダイレクトが解除できないときの対処方法
このまま画面を閉じずにURLにアクセスするとキャッシュがきかず変更が即反映されます。
ちなみにこのキャッシュクリアの方法は一般的なブラウザのHTTPリクエストを送る場合、全般で使えるようです。
logの出し方
apache2.2以前
1 2 |
RewriteLog "/tmp/rewrite.log" RewriteLogLevel 9 |
apache2.4以降
ログ自体はアクセスログにはかれます
1 |
LogLevel info rewrite:trace |
.htaccess
要件
/var/www/html/reatct_sample直下で/dest以下にアクセスさせたい(VirtualHostのDocument Root設定をすれば一瞬なのですが・・・)
http://react_sample/hoge.html で /var/www/html/dest/hoge.htmlにアクセスさせたい
下記が最小構成になると思います。
1 2 3 4 5 6 7 8 9 10 11 |
<IfModule mod_rewrite.c> RewriteEngine On #この条件をつけないと永久ループ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #直でdestに来たらしない RewriteCond %{REQUEST_URI} !/dest #RewriteRule ^(.*)$ http://localhost/react_sample/dest/$1はURL書き換えが起こる #.をつけないと相対パスにならない ./ or /自体書かない RewriteRule ^(.*)$ dest/$1 </IfModule> |
コメントにも書きましたが、下記のような点を再度注意。(どれも基本中の基本ですが・・・)
- RewriteCond !-dなどを書かないと当然永久ループ
- RewriteRule /destとかくと絶対パスになるので、注意
- RewriteRule http://〜だとURL自体書き変わるので注意(逆に書き換えたいときはこの手法)
[…] mod_rewriteでの注意点 […]