質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

10回答

4642閲覧

【技術名求む】IDによってページを振り分ける場合、「?引数名=値」を使いたくない

nnahito

総合スコア2004

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

3グッド

7クリップ

投稿2016/07/28 03:03

質問概要

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を生成しているのかな?と思っていたりしますが……

申し訳ありませんが、ご存知の方がいらっしゃいましたらご教授ください。

sk_3122, ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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を見てください。

これは形式であり、実現方法の技術のことではありません。実現するための具体的な技術としては、下記のようなモノがあります。(これ以外にもあるかもしれません)

  1. 単純に"index.html"等をすべて用意する。例: Middleman: きれいな URL (ディレクトリインデックス))
  2. mod_rewrite等を使用して書き換え、アプリ内部でPATH_INFO等を見る。例: CakePHP: インストール#Apache
  3. Webアプリそのものがルーティングする。例: Sinatra: README (Japanese)#ルーティング(Routse)
  4. JavaScriptのHistory.pushState()を用いてクライアントサイドでルーティングする。例: JS軽量クライアントサイドルーティングライブラリいろいろ - Qiitaであげられている各JSライブラリ

どれが優れているとかでは無く、言語やフレームワーク、環境によって、できるできない、しやすいしにくい、があります。静的コンテンツは1、PHPやCGIのように置くだけの動的コンテンツは2、RailsやPlayなどのWebアプリ自体でルーティングできるのであれば3、最近流行りのクライアントサイドルーティングをする場合は4といった感じでしょう。


PHPでどう実現したら良いのかは、LaravelCakePHPのソースコードを参考にすると良いと思います。もっとぶっちゃけていうと、これらのフレームワークを使った方が早いと気付く思います。

投稿2016/07/30 07:38

編集2016/07/30 07:49
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/08/03 03:19

ご回答有り難うございます。 1~4の中で、1と4のみ考えておりましたが……1は変更がめんどいですね。 現段階での知識でやるのであれば、4ですか。 2,3は調べてみます。 >PHPでどう実現したら良いのかは、LaravelやCakePHPのソースコードを参考にすると良いと思います。もっとぶっちゃけていうと、これらのフレームワークを使った方が早いと気付く思います。 実際、この質問を基にフレームワークというものを使ってみようかなと思ったのですが、そもそもこいつらは何をしてくれるもので、PCを変えてもこうかが持続してくれるのかが謎で手が出せていません…… 当方、DropBoxで様々なPCにデータを共有しているので…… でもはじめなきゃなぁ……フレームワーク
guest

0

質問にある内容は技術名というよりはURLの書式名と言ったほうがふさわしいかもしれません。

アクセスしたいリソースのユニーク名を、

  • QUERY_STINGで指定するか(?属性名=属性値)
  • ディレクトリパスの形式で指定するか

※指定されているディレクトリパスの情報が PATH_INFO です。

というURLの書き方である、ということです。

そして、受け取ったURLを、HTTPのリダイレクトを利用して取得させるなら

  • HTTPリダイレクト

でしょうし、サーバ内部処理で解決するなら

  • URLリライト
  • URL ルーティング

と呼ばれる処理(技術名)となります。

投稿2016/07/28 05:49

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz.Suenaga

2016/07/28 12:44

ちなみに PATH_INFO とよばれている理由はhttpd(apache)での設定名、環境変数名がPATH_INFOだからですね。
nnahito

2016/08/03 03:14

ご回答有り難うございます! なるほど……再読み込みをさせたくないので、今回の場合ですと「URLリライト」になるんですかね? URL ルーティングは……初めて聞きました。
kaz.Suenaga

2016/08/03 03:29

多分、特に「これ」という定義はなくて、httpd でmod_rewrite で設定するから「リライト 」と言いますし、各種(特にMVCモデルをとっている)フレームワークで捜査対象のモデル/アクション/パラメータを指定された際の動作コントロールを「ルーティング」と言うのでそう言っている、という程度の慣習だと思います。 まあ、それぞれをキーワードに検索すると色々な情報が出てくるのは確かです。
guest

0

技術名というよりは、QUERY_STRINGかPATH_INFOかといった感じでしょうか。

QUERY_STRING

http://example.com/?id=0000

PATH_INFO

http://example.com/0000

投稿2016/07/28 03:34

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/07/28 05:20

ご回答有り難うございます。 PATH_INFO!調べてみます
moonphase

2016/07/28 05:37

すみません、固定のPHPと書いておいてリンク先はPerlでした。 固定のCGIと読み替えてください。
guest

0

そういえば、特定の技術名ついてない気がしますね。

URL Rewrite とかかな、
フレームワークとかだとApacheのmod_rewriteというモジュールで設定しますね。

あとは、Clean URLとか言ってるのもあるみたいですよ。

投稿2016/07/28 03:28

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/07/28 05:19

ご回答有り難うございます。 名前…無いんですね…… しかもPHPからなどでは設定できないんですね……
guest

0

URLのみで申し訳ございませんが

おそらく
このサイトを参考に組み込めば実現できます
http://www.hoge256.net/2008/04/119.html

投稿2016/07/28 03:19

yryuu

総合スコア151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/07/28 05:19

ご回答有り難うございます。 URL先を拝見しました。 この逆の処理を行いたいのです……
guest

0

きれいにまとめてくれているページ

Apacheのhttp.confを設定できる場合の簡単な例

  1. アクセスがあったら何でもかんでもURLをリライトするように設定して、一つ(もしくは特定複数)のphpに処理を集めます。
  2. そのPHP内では、ドメイン以降の文字列を$_SERVER['REQUEST_URI']で参照できます。マニュアル
  3. これを「1」のphpの中で自力で分解して解析し、必要な処理を特定します。
  4. 最終的に呼び出すべきphpをincludeするなりして、目的のページを表示します。

フレームワークには処理をあらかじめ準備してくれていて、書式に従って記述するだけで実現できるものがあります。
呼称は皆さんおっしゃるようにpath_infoとかですかね。
フレームワークのマニュアルを眺めてそれらしい項を参照すれば使い方が見つかるんじゃないかと思います。

投稿2016/07/28 12:30

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/08/03 03:16

ご回答有り難うございます! まだしっかり見ていませんが、おおこれは! なんとなく簡単にできそうな気配が! 今少し時間がないので、後日ゆっくり拝見させていただきます。
guest

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
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2016/07/28 12:28

もうすでにマイナスがついていますね。応援の意味であげておきます。
kaz.Suenaga

2016/07/28 12:38

RESTについてはPATH_INFOとの関係でいうと因果関係が逆に思います。 RESTがまとめられるより前からPATH_INFOを使ったURL書式やアプリ実装手法は存在しました。 RESTについては、WebをDB的に扱うにあたって、 ・SELECT/INSERT/UPDATE/DELETEをHTTPのGET/POST/PUT/DELETEに対応させたこと ・リソースの指定にPATH_INFOを利用したこと ・その際、コレクションと特定のリソースの関係を /コレクション/リソース識別子/ という書式にしたこと といった「技術的特徴がある特定の技術」と解釈すべきかなと。
matobaa

2016/07/28 13:22 編集

そうなんですよね、そもそもRESTは技術ではなくてデザインの一つだし、時間軸も逆だし、と思ったので、「~ぽく」とか「~的」とかいう表現になってしまっています。 しかし、質問者がいっているURLで反応するような仕掛けをPHPで提供するためのフレームワークを探すのに、「PHP REST」で検索する価値はありそうだと思ったので回答しています。ビンゴな回答ではないというご指摘はそのとおりだと思います。
nnahito

2016/08/03 03:15

ご回答有り難うございます! REST……聞いたことはありますが、きっちりと意味を理解していません。 調べてみます
guest

0

技術名は HTTP リダイレクトです。
サーバーの設定や .htaccess で行うのが普通です。

存在しない URL を求められた時に表示するページを指定できるなら、PHP でもできます。

投稿2016/07/28 05:24

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_Roboto

2016/07/28 05:49

あれ、そうなんですか? これってリダイレクトっていうの?
Zuishin

2016/07/28 05:52

PHP で処理するならリダイレクト以外では難しいんじゃないでしょうか? 少なくとも私は知りません。
Zuishin

2016/07/28 08:44

302 を返せば URL そのままで別の URL の CGI に処理を渡せます。
matobaa

2016/07/28 10:45

> 302 を返せば URL そのままで別の URL の CGI に処理を渡せます ほう、そうなんですか。寡聞にして存じ上げませんが。その場合、HTTPレベルではどのようなやりとりがされるのでしょうか。ちょっとイメージできませんでした。
Zuishin

2016/07/28 11:51

私の思い違いでしたかね? 今は試せる環境にないのですが、確かブラウザに表示される URL をそのままにして動的 URL を静的 URL に見せるのに 302 を返していた記憶があります。 思い違いならすみません。 その場合、リダイレクトを使えば解決できるという回答も的外れということになります。 どうぞ REST 的とかどうこうという関係ない回答ではなく、問題が解決できるようなちゃんとした回答をしてあげてください。
kaz.Suenaga

2016/07/28 12:04

おじゃまします。 HTTPで言う意味でのリダイレクトであれば、あるURLにアクセスがあった際に別のURLへ「再アクセスするように指示を出す」仕組みです。 つまり、ブラウザサイドでURLが変わります。 サーバサイドで処理を別のCGI等に渡した場合、その処理は既にHTTPとは関係のないところで行われるものになります。 フォワードと言ったり、リライト、ルーティング、といったりする処理になります。 例えば QUERY_STRING でアクセスした際にPATH_INFO 形式でアクセスした時と同じ動きをさせたい場合、 ・/index.php?id=1 のアクセスを /contents/1/ に ブラウザにアクセスしなおさせるならリダイレクト ・/index.php?id=1 の表示のまま、Webサーバ側で /contents/1/ の出力を返してあげるのはリライト(ローテーション、フォワード) です。 HTTP通信による処理か、Webサーバ内での処理かの違いですね。
Zuishin

2016/07/28 12:18

ありがとうございました。 私の勘違いということですね。 インターナルリダイレクトという言葉もありましたが、適切でないようなので、撤回します。
matobaa

2016/07/28 12:24 編集

Zuishinさん リダイレクトについては撤回いただきありがとうございます。 > どうぞ REST 的とかどうこうという関係ない回答 これについてはどう始末しますか? ずいぶんと失礼な発言だなあと思っています。回答が関係ないと言われるのであれば、その根拠を示していただけるとありがたいです。
Zuishin

2016/07/28 12:24

あらためて。 PHP でも可能な 302 でのリダイレクトで質問者さんの望む結果が得られるというのが私の勘違いだったようです。よって、「HTTP リダイレクト」という言葉を撤回します。
Zuishin

2016/07/28 12:26

失礼ですかね? 私は関係ある発言をしながら質問者さんの問題解決につながらないとあなたに下げられた記憶がありますので、どうぞ解決に全力を尽くしてください。
Zuishin

2016/07/28 12:35

どうぞ解決に全力を尽くしてください。
kaz.Suenaga

2016/07/28 12:40

場にそぐわないのでやめましょう。
Zuishin

2016/07/28 12:42

kaz.Suenaga さんに同意します。
matobaa

2016/07/28 13:30

非礼を詫びるつもりはないことは理解しました。これ以上は言いません。
guest

0

まああえて言えば「静的URL偽装」でしょうね

投稿2016/07/28 03:34

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2016/07/28 05:20

ご回答有り難うございます。 「あえて」なんですね
guest

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/id0000http://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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問