見た目が素敵なURLに変えるための mod_rewrite を xampp で使う方法を解説します。

mod_rewriteでできること

ここに検索でたどり着いた人は Apacheのモジュール mod_rewrite で何ができるかはしってると思いますが念のために例を上げておくと

http://localhost/index.php?user=foo&name=bar

と書く所を

http://localhost/foo/bar.html

と書ける機能です。

foo/bar.html にアクセスすると内部で

index.php?user=foo&name=bar が呼び出されるわけです。

Xamppの設定方法

xampp は既にインストールして使ってる前提で話を進めますのでインストールがまだの方はインストールしてからまた来てください。

  1. まずApacheの設定ファイル http.conf を開きます。

自分の環境では[ X:\sugarsync\bin*xampp\apache\conf\httpd.conf* ] にありました。

  1. モジュールがコメントアウトされてないか確認する
#LoadModule rewrite_module modules/mod_rewrite.so

のようになってたら “#” を取って

#LoadModule rewrite_module modules/mod_rewrite.so

とします。

  1. リライトの規則を書く。

http.conf にどう表示を転送(書き換え?)するか RewriteRule を記述します。

<IfModule rewrite_module>
# bar.htmlを作りドキュメントルートに置いて
# http://localhost/foo.html でアクセスできるか確認しましょう。
RewriteEngine On
RewriteRule /foo.html /bar.html
</IfModule>
  1. xampp を再起動 で完了

http://localhost/foo.html にアクセスして bar.html の内容が表示されればOK!

それでも動かない場合

…とここまではGoogleで [Xampp mod_rewrite] で検索すると解説されてるサイトいっぱい出てきたんですが上記の設定だけではうちの環境では動きませんでした。

色々調べてると

<Directory />
    Options All
</Directory>

するといいよー。

的な記述をみつけたので

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory />
    Options All
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

に書き換えてみたけどダメ。

何が悪いのかわからないので、そのまま httpd.conf を眺めたら

<Directory "X:/sugarsync/bin/xampp/htdocs">
    (略)
    Options Indexes FollowSymLinks Includes ExecCGI
    (略)
</Directory>

な所を見つけたので、これを

<Directory "X:/sugarsync/bin/xampp/htdocs">
    (略)
    #Options Indexes FollowSymLinks Includes ExecCGI
    Options All
    (略)
</Directory>

に変えて xampp を再起動させたら……動いたーー!!!

動的ページを静的なページ風に出力

最初に上げた例のような動作をするためのRewriteRuleの設定は

RewriteRule /([0-9A-Za-z]+)/([0-9A-Za-z)]+).html$ /index.php?user=$1&name=$2

ただ、こうすると index.php の中で相対パスの画像などを呼び出していると

http://localhost/img/01.jpg を呼びたいのに http://localhost/foo/img/01.jpg を参照してしまう問題が発生してしまいますので画像などの参照は全て絶対パスを記述するか、もしくは

RewriteRule /([0-9A-Za-z]+)-([0-9A-Za-z)]+).html$ /index.php?user=$1&name=$2

こうして

http://localhost/foo/bar.html の代わりに

http://localhost/foo-bar.html で我慢するという方法があります。

ただこの方法の場合は引数に”-“を入れると意図しない動作になりますのでその点に注意しないといけませんが。

mod_rewrite は他にも色々と細かい設定ができますので更に知りたい方は参考のページを見るか検索で何か良さげなページを探してください。

参考

mod_rewrite

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html

mod_rewrite サンプル集/楽

http://tech.bayashi.jp/archives/entry/techweb/2007/001981.html

Apache : mod_rewriteリファレンス – dawgsdk.org

http://blog.dawgsdk.org/weblog/archives/411011

Enable mod_rewrite in windows , WAMP, XAMPP

http://phpcollection.com/mod-rewrite-windows-wamp-xampp/