質問概要
teratailやニコニコ動画、Twitterの様に、新しいページができた時に、
http://xxxx.org/?id=0000
などではなく、
http://xxxx.org/0000
のように指定できるようにする技術はどうやっているのか、また技術名を知りたい。
質問詳細
概要とほぼ一緒なのですが、新しいページができた時に、
http://xxxx.org/?id=0000
などではなく、
http://xxxx.org/0000
のように指定できるようにしたいと考えています。
現段階では、PHPを使っており、
<a href="~~.php?id=0000"></a>
のようにIDを渡して、ページに表示する内容を変えております。
しかしあまり見た目的には綺麗ではないので変えたいと思っているのですが、技術名がわからず困っております。
自身的には勝手に、テンプレートエンジン的なもので、HTMLを生成しているのかな?と思っていたりしますが……
申し訳ありませんが、ご存知の方がいらっしゃいましたらご教授ください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答10件
0
英語ではSemantic URL(あえて訳せば「意味的URL」)と呼ばれるようです。その他の呼び名として、綺麗なURL(clean URLs)、RESTfulなURL(RESTful URLs)、ユーザーフレンドURL(user-friendly URLs)、SEO対策URL(search engine-friendly URLs)でしょうか(訳語は適当)。日本語の文献では「クリーンURL」と言われることの方が多いみたいですが、訳語が安定しているようでは無いようです(そのためなのか、日本語版Wikipediaのページはまだありません)。具体例は、リンク先のWikipediaを見てください。
これは形式であり、実現方法の技術のことではありません。実現するための具体的な技術としては、下記のようなモノがあります。(これ以外にもあるかもしれません)
- 単純に"index.html"等をすべて用意する。例: Middleman: きれいな URL (ディレクトリインデックス))
- mod_rewrite等を使用して書き換え、アプリ内部でPATH_INFO等を見る。例: CakePHP: インストール#Apache
- Webアプリそのものがルーティングする。例: Sinatra: README (Japanese)#ルーティング(Routse)
- JavaScriptのHistory.pushState()を用いてクライアントサイドでルーティングする。例: JS軽量クライアントサイドルーティングライブラリいろいろ - Qiitaであげられている各JSライブラリ
どれが優れているとかでは無く、言語やフレームワーク、環境によって、できるできない、しやすいしにくい、があります。静的コンテンツは1、PHPやCGIのように置くだけの動的コンテンツは2、RailsやPlayなどのWebアプリ自体でルーティングできるのであれば3、最近流行りのクライアントサイドルーティングをする場合は4といった感じでしょう。
PHPでどう実現したら良いのかは、LaravelやCakePHPのソースコードを参考にすると良いと思います。もっとぶっちゃけていうと、これらのフレームワークを使った方が早いと気付く思います。
投稿2016/07/30 07:38
編集2016/07/30 07:49総合スコア21735
0
質問にある内容は技術名というよりはURLの書式名と言ったほうがふさわしいかもしれません。
アクセスしたいリソースのユニーク名を、
- QUERY_STINGで指定するか(?属性名=属性値)
- ディレクトリパスの形式で指定するか
※指定されているディレクトリパスの情報が PATH_INFO です。
というURLの書き方である、ということです。
そして、受け取ったURLを、HTTPのリダイレクトを利用して取得させるなら
- HTTPリダイレクト
でしょうし、サーバ内部処理で解決するなら
- URLリライト や
- URL ルーティング
と呼ばれる処理(技術名)となります。
投稿2016/07/28 05:49
総合スコア2037
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/03 03:14
2016/08/03 03:29
0
技術名というよりは、QUERY_STRINGかPATH_INFOかといった感じでしょうか。
QUERY_STRING
http://example.com/?id=0000
PATH_INFO
http://example.com/0000
投稿2016/07/28 03:34
総合スコア6621
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/28 05:20
2016/07/28 05:36
2016/07/28 05:37
0
URLのみで申し訳ございませんが
おそらく
このサイトを参考に組み込めば実現できます
http://www.hoge256.net/2008/04/119.html
投稿2016/07/28 03:19
総合スコア151
0
きれいにまとめてくれているページ
Apacheのhttp.confを設定できる場合の簡単な例
- アクセスがあったら何でもかんでもURLをリライトするように設定して、一つ(もしくは特定複数)のphpに処理を集めます。
- そのPHP内では、ドメイン以降の文字列を$_SERVER['REQUEST_URI']で参照できます。マニュアル
- これを「1」のphpの中で自力で分解して解析し、必要な処理を特定します。
- 最終的に呼び出すべきphpをincludeするなりして、目的のページを表示します。
フレームワークには処理をあらかじめ準備してくれていて、書式に従って記述するだけで実現できるものがあります。
呼称は皆さんおっしゃるようにpath_infoとかですかね。
フレームワークのマニュアルを眺めてそれらしい項を参照すれば使い方が見つかるんじゃないかと思います。
投稿2016/07/28 12:30
総合スコア2068
0
ぱっと見だと、REST っぽく見えます。
REST を意識してデザインすると、そんなURLになってきます。
http://www.restapitutorial.com/lessons/restfulresourcenaming.html
RESTそのものはもっといろいろあーだこーだ定義がついてまわるみたいですが、URL設計という側面だけをとらえて「REST的なURL」といってもよさそう。
https://www.ibm.com/developerworks/jp/webservices/library/ws-restful/
投稿2016/07/28 08:09
編集2016/07/28 08:12総合スコア2493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/28 12:28
2016/07/28 12:38
2016/07/28 13:22 編集
2016/08/03 03:15
0
技術名は HTTP リダイレクトです。
サーバーの設定や .htaccess で行うのが普通です。
存在しない URL を求められた時に表示するページを指定できるなら、PHP でもできます。
投稿2016/07/28 05:24
総合スコア28660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/28 05:49
2016/07/28 05:52
2016/07/28 07:55
2016/07/28 08:44
2016/07/28 10:45
2016/07/28 11:51
2016/07/28 12:20 編集
2016/07/28 12:04
2016/07/28 12:18
2016/07/28 12:24 編集
2016/07/28 12:24
2016/07/28 12:26
2016/07/28 12:33
2016/07/28 12:35
2016/07/28 12:40
2016/07/28 12:42
2016/07/28 13:30
0
ApacheのRewrite機能を使えば、やりたいことは実現できると思います。
参考)PHPで動的URLを静的URLに変換するには
http://oshiete.goo.ne.jp/qa/4127921.html
Rewrite機能
Rewrite機能とは、アクセスのあったURLを、正規表現で書き換えてから処理する機能です。
http://rfs.jp/server/apache/02apache/url_rewrite.html
例えば、Blogなど、プログラム呼び出しのURLを書き換える
下記の例では、/cgi-bin/abcSPa_1-b_2.htmlというURLを、/cgi-bin/abc.cgi?arg=a_1-b_2に書き換えます。
※([a-z_]+)が$1に入り、(.+)が$2に入ります
RewriteEngine on RewriteBase /cgi-bin RewriteRule ([a-z_]+)SP(.+)\.html$ $1.cgi?arg=$2 [T=application/x-httpd-cgi,L]
ご質問の例であれば、
<a href="http://xxxx.org/id0000"></a>
・・・
<a href="http://xxxx.org/id9999"></a>
RewriteEngine on RewriteBase / RewriteRule id([0-9]+)$ $index.cgi?id=$1 [T=application/x-httpd-cgi,L]
http://xxxx.org/id0000 を http://xxxx/org/index.cgi?id=0000
にApacheのRewrite機能がURLを変換して処理してくれます。
あとは、このあたりも参考になりそうですね。
http://kana-lier.com/web/redirect/
投稿2016/08/02 05:50
編集2016/08/02 05:52退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/03 03:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/03 03:19