PHPから自動作成したウェブページのURLについて


こちらのページ
http://www.phppro.jp/qa/2667

質問者さんは自己解決されたようですが、同じところでつまずいています。
どのように自己解決されたのでしょうか?
やり方、考え方を教えてください。
おそらく簡単な事だとは予想できるのですが、いまひとつわかりません。

例を挙げると、こちらのサイトのように、データベースに登録した任意の数字(このサイトの場合は証券コード(ID))をurlとしてページを作成したいのです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/05/08 14:25:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント60pt

> 質問者さんは自己解決されたようですが...
> どのように自己解決されたのでしょうか?
質問サイトは、質問者の為だけにあるのではなく同じ(ような)疑問を抱いた多くの第三者の為にもあるのだ、という事が理解できていないとこういう残念な事に...


> データベースに登録した任意の数字をurlとしてページを作成したい
特定パターンの URL でアクセスされた場合、データベースからデータを引き出す等してページデータを動的に作成してブラウザへ返してやる
というようにすればお望みのモノが出来ます。

はてなの質問ページも同じようになっていますよね?


Apache ウェブサーバには、アクセスされた URL を(こちらの都合の良いように)書き換えた状態でアクセスされたものであるように細工する仕組み「ReWrite モジュール」が用意されています。
本家のマニュアルをご一読ください。
http://httpd.apache.org/docs/2.4/rewrite/
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

以前は日本語に訳されたページ(バージョンは1.3でしたが)があったと思いますが、もう見当たらなくなっていますね...
「apache mod_rewrite」でググれば日本語のモノも見つかると思います。
使い方なども...

流れとしてはこんな感じです。
特定のパターン(例えば先頭から末尾まで数字ばっかり)でのアクセスは、
データベースからデータを引き出すスクリプト(hoge.php とします)にその数字をパラメートとして付けて渡します。
スクリプトはパラメータの値を使って必要なデータを生成して書き出す。

http://example.com/0123456/
↓(mod_rewrite で書き換える)
http://example.com/hoge.php?id=0123456
(以下は普通のPHPスクリプトと同じ)
hoge.php で、$_GET['id'] という変数に 0123456 が格納されているので、これを使ってデータを引き出し、ページデータを生成して出力する


mod_rewrite を使う事が許されているレンタルサーバなら、あまり考えずに .htaccess に書換のルールを書いてしまえばよい(パーミッションが問題になる場合もあったよな)ですが、VPSを含む専用サーバなどでは FileInfo の上書きを許可が必要ですのでお忘れなく。
__設定忘れ、書式不良、再起動忘れ等で全然機能しない...
__というのをよくやりました...orz

mod_rewrite についてはよくお調べください。
どんな URL でアクセスして欲しいかや、ファイル(.htaccess と 実行するスクリプト)の配置などで微妙に記述が変わります。
__仮想の実機環境を構築してのテストがお勧めです。

id:jamis

ありがとうございます。

まだトライしていませんが、このやり方を調べればなんとかできそうですね。

2013/05/08 14:23:14

その他の回答2件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

ポイント20pt

以下の回答の通りやるのが定石です。
http://www.phppro.jp/qa/2667#10606

http://example.jp/168024.php へのアクセスを、http://example.jp/hoge.php?id=168024 へジャンプさせてやります。hoge.phpは、与えられたIDに基づいて商品情報を表示するスクリプトだとします。

WebサーバがApacheなら、httpd.confまたは.htaccessに以下のようにmod_rewrite を定義します。

RewriteEngine On
RewriteRule ^/([0-9]+)\.php$ /hoge.php?id=$1
id:jamis

ありがとうございます。

2013/05/08 14:23:26
id:holoholobird No.2

回答回数574ベストアンサー獲得回数104

ポイント20pt

これはPHPではなく、APACHEのrewriteの話になります。
rewriteというのは、たとえば
http://www.com/aaa/1234.php
にアクセスしたときに、このURLを自動で
http://www.com/aaa.php?id=1234
などと書き換え(rewrite)る機能のことです。

ある人がhttp://www.com/aaa/1234.phpをクリックすると、あなたのサーバーにあるAPACHEが、aaa.phpにid=1234を渡します。
PHPがaaa.phpにid=1234を渡した結果を計算して、APACHEに返します。
APACHEは、その結果を画面に表示します。

ですのでこういうURLの操作を行うには、APACHEの設定が必要です。

id:jamis

ありがとうございます。

2013/05/08 14:23:36
id:tezcello No.3

回答回数460ベストアンサー獲得回数69ここでベストアンサー

ポイント60pt

> 質問者さんは自己解決されたようですが...
> どのように自己解決されたのでしょうか?
質問サイトは、質問者の為だけにあるのではなく同じ(ような)疑問を抱いた多くの第三者の為にもあるのだ、という事が理解できていないとこういう残念な事に...


> データベースに登録した任意の数字をurlとしてページを作成したい
特定パターンの URL でアクセスされた場合、データベースからデータを引き出す等してページデータを動的に作成してブラウザへ返してやる
というようにすればお望みのモノが出来ます。

はてなの質問ページも同じようになっていますよね?


Apache ウェブサーバには、アクセスされた URL を(こちらの都合の良いように)書き換えた状態でアクセスされたものであるように細工する仕組み「ReWrite モジュール」が用意されています。
本家のマニュアルをご一読ください。
http://httpd.apache.org/docs/2.4/rewrite/
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

以前は日本語に訳されたページ(バージョンは1.3でしたが)があったと思いますが、もう見当たらなくなっていますね...
「apache mod_rewrite」でググれば日本語のモノも見つかると思います。
使い方なども...

流れとしてはこんな感じです。
特定のパターン(例えば先頭から末尾まで数字ばっかり)でのアクセスは、
データベースからデータを引き出すスクリプト(hoge.php とします)にその数字をパラメートとして付けて渡します。
スクリプトはパラメータの値を使って必要なデータを生成して書き出す。

http://example.com/0123456/
↓(mod_rewrite で書き換える)
http://example.com/hoge.php?id=0123456
(以下は普通のPHPスクリプトと同じ)
hoge.php で、$_GET['id'] という変数に 0123456 が格納されているので、これを使ってデータを引き出し、ページデータを生成して出力する


mod_rewrite を使う事が許されているレンタルサーバなら、あまり考えずに .htaccess に書換のルールを書いてしまえばよい(パーミッションが問題になる場合もあったよな)ですが、VPSを含む専用サーバなどでは FileInfo の上書きを許可が必要ですのでお忘れなく。
__設定忘れ、書式不良、再起動忘れ等で全然機能しない...
__というのをよくやりました...orz

mod_rewrite についてはよくお調べください。
どんな URL でアクセスして欲しいかや、ファイル(.htaccess と 実行するスクリプト)の配置などで微妙に記述が変わります。
__仮想の実機環境を構築してのテストがお勧めです。

id:jamis

ありがとうございます。

まだトライしていませんが、このやり方を調べればなんとかできそうですね。

2013/05/08 14:23:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません