カテゴリー別アーカイブ: mod_rewrite

.htaccess mod_rewrite

サーバーサイドを中心としたアプリケーションでは, アクセスしたURLに関わらず, いったんリクエストをフロントコントローラーにリクエストを送り, 元のURLから対象となるコントローラー・アクション (メソッド) を呼び出す (ルーティング) という実装をします.

その場合に, 必要となるのが.htaccessのmod_rewriteの機能です. なぜなら, すべてのリクエストをいったんフロントコントローラーに送る必要があるからです.

といっても, そんなに難しいことではなく, 以下の数行を書いて対象のディレクトリに置いておくだけです. このサンプルでは, フロントコントローラー名はindex.phpとしています.

<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php [QSA,L]
</IfModle>

ちなみに, ロリポップのレンタルサーバーを利用している場合, IfModuleの部分があると動作しないので, 以下のように修正してアップロードしておきます (コメントアウトか消しておく).

#<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php [QSA,L]
#</IfModle>

Mac OS Xでmod_rewrite

備忘録的に…

1 . まずは, mod_rewriteが入っているか念のため確認

Apacheの設定ファイル /private/etc/apache2/httpd.conf に以下の行があって, かつ, コメントアウトされていないか確認

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

2.  /private/etc/apache2/users/{ユーザ名}.conf に以下の記述を追加

<Directory /Users/{ユーザ名}/Sites>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

mod_rewriteを機能させるうえで重要なのは,

Options Indexes MultiViews FollowSymLinks
AllowOverride All

この2行.

1つめは, Mac OS Xでは, /etcは, /private/etcへのシンボリックリンクとなっているので, それをたどるように指示している感じ.

2つめは, .htaccessの設定を優先しますよ〜的な指示.

最後に, mod_rewriteを有効にしたいディレクトリに.htaccessを置いて, mod_rewriteのルールを記述します. こんな感じです.

#mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

このルールによって, htmlの拡張子をURLに含めずに,

HTMLファイルにアクセスすることが可能になります.