拡張子のないURIへのアクセスを可能にする

Last-modified: Wed, 03 Sep 2014 05:25:12 HADT (1720d)

拡張子のないURIについて

 最近はファイルに「.php」や「.cgi」といった拡張子を付けずにアクセスさせることがトレンドである。たとえば以下のようなアドレスを見たことのある人は結構多いのではないだろうか。

 ttp://example.com/login

 こういう風にする理由はいくつかあるらしいが、たとえば使っている言語が仮にphpだとして、

 ttp://example.com/login.php

 としてしまうと、遠い将来、phpではなくzzzという別の言語を採用したときに、

 ttp://example.com/login.zzz

 となってアドレスが変わってしまうので、そういったことをを防ぐためというのがある。また、使用している言語(PHP、Perl、Rubyなど)を諸々の理由から隠したいというのもあるらしい。
 理由はどうあれ、将来的には拡張子を付けない方が一般的になるだろうし、トレンドを採用していると訪問者にこのサイトはちゃんとメンテされているという印象を持たれるので採用しても損はないと思う。

参考サイト

 クールなURIは変わらない -- Style Guide for Online Hypertext
 第21回 “使いやすいURI(URL)”の設計を考える(続編) - 技術者視点のユーザビリティ考:ITpro

FilesMatchを使う

 とはいってもXOOPSでは採用できそうなファイルがあまりない。強いて挙げるならログインページ、ユーザ登録ページ、パスワード再発行ページの三つのファイルになるだろうか。

 ttp://example.com/user.php
 ↓
 ttp://example.com/user

 ttp://example.com/register.php
 ↓
 ttp://example.com/register

 ttp://example.com/lostpass.php
 ↓
 ttp://example.com/lostpass

 これを実現するために.htaccessにFilesMatchという設定を書き込む。

<FilesMatch "^register$|^user$|^lostpass$">
  ForceType application/x-httpd-php
</FilesMatch>

 ただ上の方法はこの話題が出ているサイトの多くに書かれているのだが、ある条件下でエラーになってしまうようだ。なので下の書き方の方がいいようである。

<FilesMatch "^register$|^user$|^lostpass$">
  SetHandler php-script
</FilesMatch>

 以上の設定は「register」「user」「lostpass」というファイルはphpファイルとしてユーザにアクセスさせる、という内容になる。そして、元々存在する「register.php」「user.php」「lostpass.php」から拡張子を削除したファイルをサーバにアップロードしておけば、拡張子のないURIへのアクセスが可能になる。念のために拡張子があるファイルも残しておいた方がいいだろう。つまり、中身は同一で名前だけが違う(拡張子があるものとないもの)を一緒に置いておくということだ。勿論、拡張子のないURIへアクセスさせるためにはtheme.htmlなどに拡張子のないファイルへのリンクを書く必要がある。

 <a href="http://example.com/register">登録する</a>

参考サイト

 406 Not Acceptable

Options +Multiviews

 .htaccessに以下の記述を追加すると、拡張子のないファイルでも適当に判別してアクセスしてくれるらしいが試していないので詳細は不明。

Options +MultiViews
MultiViewsMatch Handlers

参考サイト

 Multiviewsのススメ


[PR]