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
にて
そして .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]
- 変換後のクエリを元のクエリに追加する
- これを付けないと,元のクエリに上書きされる
- [L]