WEBサイトのURL構造を自由に変える方法

WEBサイトのURL構造

HTMLファイルをいっぱい書いてホームページを作ったことがある人なら分かるかと思いますが、WEB上のURL構造は通常であれば、サーバのディレクトリ構造そのものです。

http://example.com/introduction/index.html

こういう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の情報をプログラムに丸投げしてしまって、プログラムで解析した方が楽です。

PHP10行で作る超シンプルフレームワーク

http://choilog.com/katty0324/blog/6

こうすれば、Wikipediaのように、実際には存在しないファイルにもURLを割り当てられますし、?や&を使った暗号的なURLにする必要もありません。

About katty0324

Leave a Reply

Scroll To Top