クエリパラメータのかわりにスラッシュ区切りのURLでアクセスする方法

「domain/index.php?id=1」と「domain/index/id/1」のように、クエリパラメータのかわりにスラッシュ区切りのURLでアクセスするには、Apache の Rewrite 機能を使います。なお、URL 設計では気をつけることが 2点あります。 1つは、同一コンテンツに対する URL は永久不変であること。もう 1つは、URL に含めるのはドメイン、id日付 (制作日) とし、題目やカテゴリ名などは避けることです。

クエリパラメータのかわりにスラッシュ区切りの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 にするために気をつけることを説明しています。

Cool URIs don’t change

クールなURIは変わらない
※ Cool URIs don’t change の日本語訳

URL に入れてはいけないものを幾つか列挙しておきます。

  1. Authers name (作者名)
  2. Subject (題目、件名、タイトル)
  3. Status (最新版、旧版など)
  4. Access (例えば、限定公開、会員専用等の閲覧できるグループ名)
  5. File name extension (例えば cgi、html、css など)
  6. Topics and Classification (トピックス、カテゴリ名など)

では、逆に URL に入れても安心なものは何でしょうか。

ベストプラクティスは id または 日付 (制作日) です。
id だけでは人間にとって分かりにくいので
大抵は題目か何かを URL に入れたいという欲求にかられます。
しかし、安全と言えそうなのは 日付 くらいです。

例えば、WordPress のパーマリンク形式は
「http://domain/?p=123」
が初期設定となっており、よく考えられています。
残念ながら、長期的な観点からはデフォルト選択肢が
抜きん出て良い選択肢であるとまでは説明されていませんが。

コンテンツは予想を超えて長生きすることがあります。
URL をドメイン、id、日付だけで作っていれば
10年後、20年後の支出削減につながることでしょう。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*