クエリパラメータのかわりにスラッシュ区切りのURLでアクセスする方法
PHP で Webサイトを開発したことがあるなら
「domain/index.php?id=1」
のような URL を見慣れていると思います。
同じコンテンツに対して
「domain/index/id/1」
でアクセスするケースも見かけたことがあると思います。
もちろん、サーバ側がそのような
ディレクトリ構造を持っているわけではありません。
これはどうやって動作しているのでしょうか?
これは Apache の Rewrite 機能を使うことで実現できます。
.htaccess に以下のように記述することで
index.php へとアクセスを集約します。
RewriteEngine on
RewriteRule ^(.*)$ index.php [L]
index.php に以下のように書いて Webブラウザで
アクセスすると「/index/id/1」と表示されます。
あとは、index.php 内でこれを上手く処理して、
URI にふさわしいデータを返せば OK です。
<?php
echo $_SERVER['REQUEST_URI'];
?>
もうちょっとだけゴールに近づけます。
index.php に以下のように書くと
Webブラウザに「Array ( [0] => [1] => index [2] => id [3] => 1 )」と表示されます。
こうするとパラメータをとりやすいかもしれません。
※split は php 5.3.0 で非推奨になったので使わない方が良いです。
<?php
print_r( explode('/', $_SERVER['REQUEST_URI']) );
?>
このような動作は
ディスパッチ (Dispatch) 、ディスパッチャー (Dispatcher) 、
ルーティング (routing) 、内部URL、外部URL などと
呼ばれたりします。
上記の実装方法より遥かに大切なこと
コンテンツにどのような形式の URL を与えるべきか
という疑問を持たれるかもしれません。
それはそれで興味深い話題です。
しかし、その件についてはまたいつか。
この記事を読んだ結果、
コンテンツの URL が変更しようと
思い立つ人がいてはいけません。
最後に、同一のコンテンツに対しては
常に同一のURLでアクセスできることの
重要性についてお話ししておきます。
URL が可変であるということはどういうことでしょうか。
極端な例で言えば、さっきアクセスできた Google に
今はアクセスできないということです。
アクセス毎にニュース記事の URL が変わるということです。
大変なストレスやコストにつながります。
卑近な例で言えば、SEOにも悪影響です。
URL は可能な限り保たれた方が良いのです。
インターネットやWebサイト
(World Wide Web、URL、HTTP、HTML) など
の生みの親である Timothy John Berners-Lee
(ティモシー・ジョン・バーナーズ=リー) は
以下の記事で、URL の変更が信頼を失うことにつながりこと、
そして、良い URL にするために気をつけることを説明しています。
クールなURIは変わらない
※ Cool URIs don’t change の日本語訳
URL に入れてはいけないものを幾つか列挙しておきます。
- Authers name (作者名)
- Subject (題目、件名、タイトル)
- Status (最新版、旧版など)
- Access (例えば、限定公開、会員専用等の閲覧できるグループ名)
- File name extension (例えば cgi、html、css など)
- Topics and Classification (トピックス、カテゴリ名など)
では、逆に URL に入れても安心なものは何でしょうか。
ベストプラクティスは id または 日付 (制作日) です。
id だけでは人間にとって分かりにくいので
大抵は題目か何かを URL に入れたいという欲求にかられます。
しかし、安全と言えそうなのは 日付 くらいです。
例えば、WordPress のパーマリンク形式は
「http://domain/?p=123」
が初期設定となっており、よく考えられています。
残念ながら、長期的な観点からはデフォルト選択肢が
抜きん出て良い選択肢であるとまでは説明されていませんが。
コンテンツは予想を超えて長生きすることがあります。
URL をドメイン、id、日付だけで作っていれば
10年後、20年後の支出削減につながることでしょう。
お問い合わせについて
業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
※ご契約前のコメントやメールでのやりとりは無料です。