WEBサイトのURL構造
HTMLファイルをいっぱい書いてホームページを作ったことがある人なら分かるかと思いますが、WEB上のURL構造は通常であれば、サーバのディレクトリ構造そのものです。
こういうURLでアクセスすると、次のようなファイルが読み込まれます。
/ルートディレクトリ/introduction/index.html
WikipediaみたいなURL構造が作りたい!
Wikipediaなどは、ちょっと変わったことをしています。たとえば、次のようなURLです。
http://ja.wikipedia.org/wiki/Web
これは、wikiディレクトリの中にWebディレクトリがあって、その中のindex.htmlを呼び出しているのでしょうか?
もしそうなら、wikiディレクトリの中には、Wikipediaに登録されている全ての用語のディレクトリがあるはずです。(実に80万個!)
次のようにテキトーなURLを叩いてみます。
http://ja.wikipedia.org/wiki/Webaaaa
こんな想定外のURLでも、404 Not Foundとかにならずにちゃんとアクセスできます。「wikiディレクトリの中の構造はどうなっているんだ?」という話です。
http://ja.wikipedia.org/wiki/index.php?q=Webaaaa
この挙動って、まるでこんな風にGETパラメータとして検索語を渡しているみたいです。でも、GETパラメータで渡すより短く綺麗に検索語を渡せています。
RewriteEngine
こういう不思議なURL構造は、RewriteEngineというApacheモジュールを使うことで実現できます。
なにかしらのURLでアクセスがあったときに、そのURLを先に解析して、実際にどのプログラムに処理を要求するかを自在に操れるんです!
index.htmlでアクセスしてるのに、実は裏側ではindex.phpが動いているということもできます。
httpd.confか.htaccessで設定する
RewriteEngineの設定は、httpd.confか.htaccessで行うことができます。
レンタルサーバの場合は、.htaccessでやるしかない場合が多いです。この場合はURL構造を変えたいディレクトリのところに.htaccessというファイルを作って、そこに以下のようなことを書きます。
# RewriteEngineを使う
RewriteEngine on
# 次のファイル名が存在しない時
RewriteCond %{REQUEST_FILENAME} !-f
# URL末尾のindex.htmlはindex.phpに変える
RewriteRule ^(.*)index.html$ $1index.php [L]
こうすると、この.htaccessを置いたディレクトリ以下では、URLのindex.htmlがindex.phpに書き換えられます。
実際の使い方
実際には、次のページで解説しているように、URLの情報をプログラムに丸投げしてしまって、プログラムで解析した方が楽です。
http://choilog.com/katty0324/blog/6
こうすれば、Wikipediaのように、実際には存在しないファイルにもURLを割り当てられますし、?や&を使った暗号的なURLにする必要もありません。
コメント