CoolなURLを作るときのHotな落とし穴
CoolなURLを作るには(2008/7)という記事にそこそこアクセスが集まっている。ご愛読ありがとうございます。 話が長くなるのでわざと今まで書かなかったのだが、あの話には実は大きな落とし穴がある。
方法はmod_rewriteでもなんでもかまわない。
http://geekdb.jp/geek.php?name=yusukebe
というURLを
http://geekdb.jp/geek/yusukebe
に見せかけるとしよう。(あれ?「x」はドコいったの?とかいうツッコミはスルー 笑。本質ではない。)
このとき、そのサイトのロゴマークの画像(logomark.gif)も含め、下のようなディレクトリ構成だったとする。
(DocumentRoot)/
geek.php
images/
logomark.gif
このとき、geek.phpの中身が
<html> <img src="images/logomark.gif"> <?php echo $name ?> さんです。 </html>みたいなことになってると、
http://geekdb.jp/geek/yusukebe
にアクセスしたときにブラウザは
http://geekdb.jp/geek/images/logomark.gif
を探しにいってしまう。当然画像は404で表示されない。
あるいは、
http://geekdb.jp/geek/yusukebe/ (最後のスラッシュがポイント)
にアクセスしたときにブラウザは
http://geekdb.jp/geek/yusukebe/images/logomark.gif
を探しにいってしまう。
本当に拾うべき画像は
http://geekdb.jp/images/logomark.gif
なのに!!
そう、&や=を/(スラッシュ)で置き換えようとすると、HTML上での相対パスが笑っちゃうくらい乱れることがあるのだ。
対策は、絶対パスで書くしかない。つまり
<img src="/images/logomark.gif">
絶対URLで書くという手もあるが、
<img src="http://geekdb.jp/images/logomark.gif">
これだと常に本番環境を見ることになる。自分の手元の開発環境は
http://localhost:8080/geek/yusukebe
だったりするのに、それじゃ開発環境にならない。htmlのbaseタグを使うという手法も同じ意味でダメである。
「そんなの当然じゃん何いってんの?」とか思っちゃいけない。 画像やjsファイルなどの位置を相対パスで書くクセがついてしまっているデザイナーさんは意外と少なくない。あるいは相対パスで書くことをよしとするHTMLデザイン規定をしいてしまっているサイトだってめずらしくないのだ。Webサイトの制作過程=「開発」過程とはニュアンスが異なるのがポイント=においてWebサーバ上ではなくローカルPCのファイルシステム上でデザインチェック等をするときにそのほうが便利だという理由でごく当たり前に行われていたりする。
いずれにせよ初めから計算に入れておくしかないのだが、 「そんなこと言ったって、今すでに相対パス指定で書いちゃってる大量のブツはどうすんのよ?!」「そこをなんとか、、、しょーがないから*.gifと*.jpgと*.jsへのアクセスをAliasとmod_rewriteでどうにかごまかして、、、」といった対処療法を繰り返している間に httpd.conf が肥大しカオスと化していったりするのである。(笑)

コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)