mod_rewrite を使う

こういった設定系は,あっという間に忘れてしまうので...

目的

http://hostname.com/service/yyyy/mm/dd

http://hostname.com/service/dispatch.rhtml?argument=yyyy/mm/dd
としたい.

方法

以下,ubuntu にて mod_rewrite を使うための方法をまとめる.

まず,

sudo /usr/sbin/a2enmod rewrite

して mod_rewrite を有効化しておく.

.htaccess で設定する場合
sudo vim /etc/apache2/sites-available/default

にて に AllowOverride All しておく.

そして .htaccess

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.rhtml?path=$1 [QSA,L]
</IfModule>

とする.

conf ファイルを作成する場合

ubuntu では,apache2.conf から sites-enables 以下のファイルが読み込まれる.
sites-enables 以下に,例えば hoge ファイルを作成し,sites-availables に ln -s を置く.

hoge には以下を記述する.

<Directory /var/www/hoge/>
  AllowOverride None
  Order allow,deny            ←','の前後にスペース入れちゃだめ
  Allow from all

  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.html?path=$1 [QSA,L]    ←','の前後にスペース入れちゃだめ
</Directory>

後はサーバを再起動して,特にエラーが出なければOK.

参考:アクセス制限の記述
http://www.adminweb.jp/apache/allow/index1.html

Cond/Rule について
  • RewriteCond
    • -d → ディレクトリ
    • -f → ファイル
    • ! → 否定の意味になる
  • RewriteRule
    • [L]
      • そこで URL の変換を終了
    • [QAS]
      • 変換後のクエリを元のクエリに追加する
      • これを付けないと,元のクエリに上書きされる

詳細は↓
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html