それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Apache2でmod_rewrite が動かない?

Apache2 で rewrite エンジンを動か無いときにチェックするもの

久しぶりに、ubuntu にApache2+php いれて /aaa/aaa を /index.php/aaa/aaa に転送しようとしたら出来ない。

apache2 の場合、rewrite を使うまでにいくつか手順が必要

  1. rewrite が有効になっていますか
  2. Allow Override が使えるか
  3. htaccess の記述内容は正しいですか

rewrite を有効にして、有効になっているか。

apache の場合、rewrite を使ってリクエストのPATHをキャッチオールするので、有効にする

sudo a2enmod rewrite 
sudo apache2 configtest
sudo apache2 restart

Allow Override

apache2.conf で Allow Orverride を有効にする

Allow Orverride はディレクトリに対する設定で書くので、apache2.conf に書く。

 <Directory /var/www/>
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
 </Directory>

.htaccess の記述

.htaccess の記述を確認する。rewrite を有効にしているかチェック

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg|map)$ [NC]
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

rewrite を使う時

rewrite は標準でインストールされるが、htaccess で使うのに Allow Override がhttpd.confに必要で、一回書くとずっと使うので忘れますね。

nginx だと rewrite のルールは nginx のconfig に書くので、更に忘れますね。

参考資料

Apache/Apacheでmod-rewriteが動かない場合の原因のいくつか - Web関連技術調査