foo/bar/bazしたい
foo.html
というドキュメントに何らかのパラメーターを与えたい場合、foo.html?foo=bar
としたり、foo.html#foo=bar
としたりすることが多いが、サーバーの設定をいじるだけで(場合によりいじらなくても)foo.html/foo/bar
のようなアドレスでアクセスできるようになる。ユーザーから見るとディレクトリ構造が明確になってよいし、クローラーも単一のドキュメントとして扱ってくれそうだから嬉しい。
サーバーの設定
Apache 2.xではデフォルトでPATH_INFOを有効化していないみたいなので、.htaccessでAcceptPathInfo on
にしとけばOK。あと.htmlがじゃまくさいときにはOptions +MultiViews
にしておく必要があるけれど、今回の本題とはちょっと違う。
.htaccess
<Files "foo.html">
AcceptPathInfo on
</Files>
文書側の設定
今回使ったコードはこちら。
foo.hmtl
<!DOCTYPE html>
<html>
<head>
<base href="/foo/">
<script src="jquery.min.js"></script>
<script>
$(function(){
var path_info = document.documentURI.substr(document.baseURI.length);
path_info.match(/^[^\/]+(.*)$/);
path_info = RegExp.$1;
var path_name = RegExp.$1;
$('<div>')
.appendTo($('body'))
.text(path_name);
});
</script>
</head>
<body>
<img src="dog-1.jpg" width="100">
</body>
</html>
<base href>
で指定したものはdocument.baseURI
で取得できるので、document.documentURI
に入っているそれ以降の文字列で、現在の文書名(foo)より後のものはPATH_INFO
になる。
残念ながら、素のJavaScriptでPerl/CGIでいう$ENV{SCRIPT_NAME}
は取得できないようなので、手動で<base href>
するしかない模様。ただし、これが自動で取得できようがどうであろうが、最初にjquery.min.js
などを読むときにもbaseURIが必要になってしまうので、だいぶ面倒そう。
まとめ
-
foo.html/bar/baz
もしくはfoo/bar/baz
型のアドレスは作れる - Apache 2.xの場合はサーバーの設定、もしくは
.htaccess
の設定が必要 - baseURIは手動入力