PHPのみ、または.htaccessのみ、もしくは双方を駆使して下記のようにURLを整形する方法をご存知の方教えて下さい。

http://xxx.xxx.xxx/xxx.php?xx=** → http://xxx.xxx.xxx/**/
できれば、上記のように整形したURLを実際のアクセス可能なURLとして利用する方法もお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/12/13 23:01:53
  • 終了:--

回答(8件)

id:zizz_walla No.1

zizz_walla回答回数121ベストアンサー獲得回数02004/12/13 23:28:28

ポイント15pt

http://www.hatena.ne.jp/1102475369

[SEO+PHP+HTML] 大量の商品を扱うサイトを運営しています。データベースの内容を一枚のPHPファイルにて、出力しています。 SEO的には、商品数に応じた静的なhtmlファイルを.. - 人力検索はてな

・mod_rewriteモジュールを使う方法

・環境変数PATH_INFOを使う方法

を紹介したことがあります。

http://blog.su-jine.com/archives/2004/08/_mod_rewrite.html

動的だけど静的なページの作成 (mod_rewrite): Su-Jine の独り言

id:ska-ken

ありがとうございます。是非ご参考にさせていただきます。

2004/12/14 10:33:28
id:szkn No.2

szkn回答回数15ベストアンサー獲得回数02004/12/13 23:28:30

ポイント15pt

// [.htaccess]

DirectoryIndex xxx.php

// [.htaccess]

として

**/

にアクセスすれば

$_SERVER[’PATH_INFO’]に’/**/’が格納されます

// [xxx.php]

$foo = explode(’/’,$_SERVER[’PATH_INFO’]);

// [xxx.php]

とすれば、$foo[1]に’**’が格納されます

[xxx.php]内の$_GET[’xx’]を$foo[1]に変換すれば現在のまま使えるはずです。

id:ska-ken

ありがとうございます!実践してみます。

2004/12/14 10:53:48
id:ke_ishi No.3

ke_ishi回答回数269ベストアンサー獲得回数02004/12/13 23:44:41

ポイント15pt

xxx.phpの内容

$xx=$_GET[’xx’];

header(”location:

{$xx}/”);

exit;

ドキュメントルートにはアクセス可能なフォルダを作り、コンテンツを用意しておく。

てのが一番簡単でしょうね。

id:ska-ken

実際のURLとして活用する方法ですね。ありがとうございます。

2004/12/14 12:39:00
id:Urakusai No.4

Urakusai回答回数16ベストアンサー獲得回数02004/12/14 06:42:17

ポイント15pt

ここにアクセスしてみて下さい。設定をした後、ファイル生成ボタンを押すと、.htaccessファイルの内容が、自動生成されますよ。便利です。

id:ska-ken

便利なツールですね。ありがとうございます。.htaccessを作成する際には利用させて頂きたいと思います。

2004/12/14 13:45:36
id:americanboss No.5

americanboss回答回数52ベストアンサー獲得回数02004/12/14 09:56:46

ポイント15pt

どのようにしたいか具体的なものが見えませんが、以下のようにPHPでプログラムを組んでみてはいかがでしょうか。

<?php

$hatena = ”

**”;

//**を求める

list($url, $qs) = explode(”?”, $hatena);

list($key, $value) = explode(”=”, $qs);

//ホストを求める

$parsed = parse_url($hatena);

$host = $parsed[”host”];

$string = ”http://”.$host.”/”.$value.”/”;

?>

id:ska-ken

ありがとうございます!上記を参考に分割して整形はできました。この整形したURLを元の動的(引数付き)なURLの時と同じように動かしたいと思っているのですが。ご存知の方お願いいたします。

2004/12/14 19:40:21
id:kuni92 No.6

kuni92回答回数13ベストアンサー獲得回数02004/12/14 19:23:47

ポイント15pt

http://naoya.dyndns.org/~naoya/mt/archives/001130.html

SEO 用 mod_rewrite ルールを生成する Webmaster Toolkit : NDO::Weblog

mod_rewriteを利用してやるなら下記が参考になります。.htaccessでもできます

id:ska-ken

「Webmaster Toolkit」ご紹介頂きありがとうございます!さっそく使ってみました。日本語版は無いですよね?

2004/12/15 10:43:26
id:szkn No.7

szkn回答回数15ベストアンサー獲得回数02004/12/15 10:21:07

ポイント15pt

他の方もそうだと思うのですが、実現したい処理内容がやや不明確に思われるので、長くなりますが考えられるパターン全てについて回答します。

ポイント1:訪問者に入力させたいURL

A.

B.

ポイント2:処理内容

C.valueに応じて全く違う種類の処理

 例えば、valueがmailであればメール送信、viewであればページ表示、crashであればブラクラ表示・・・

D.valueに応じてある共通処理の一部を変更

 例えば、valueに応じたエントリーを表示(ブログ)

 または例えば、いずれもメール送信だが送信先はvalue、いずれも頁を表示するがtopであればトップページ、ToCであれば目次(ただしHTML headなど多くの部分が共通)

E.CとDのコンボ

ただし、C,D,Eについては、必ずしも分ける必要はありません。

mail送信はmail.php、ページ表示はview.phpとするか、どちらもmail()関数とview()関数のあるfoo.phpで行うか、時と場合によって使い分ければいいと思います。ここでは、前者をC、後者をDと考えています。

Eは、例えばvalueがmail2aであればmail.phpでa宛にメール、mail2bであればmail.phpでB宛にメール、viewAであればA.htmlを表示、viewBであればB.htmlを表示といったような処理ですが、ようは組み合わせ方次第なので深くは書きません。

まず、私の先の回答は、B+Dを想定していました。

見た目上のアクセスは、

ですが、実際の処理はfoo.phpで行なわれ、処理内容はvalue($foo[0])で分岐できます

ただし、先の回答で書き忘れましたが、実際に

というディレクトリが存在する場合は、foo.phpではなくディレクトリへのアクセスになるので注意が必要です。

また、これはzizz_wallaさんの挙げている「動的だけど静的なページの作成 (PATH_INFO): Su-Jine の独り言」もほぼ同じです。

以下、全てのアクセスをfoo.phpで処理するのであれば私の方法の方が効率的ですが、

zizz_wallaさんの挙げている方法であれば、valueの値によってfoo1.phpとfoo2.phpに振り分けるようなこともできます。(A+Eの場合はこちらの方が効率てきでしょう)

A+Cの場合、回答(3)、ke_ishiさんの方法でしょう。

見た目上のアクセスは、

であり、foo.phpはリダイレクト(転送)のみを行ないます。

この時、転送されるのは

というディレクトリになります。

コメントからして、これはお望みの回答では内容なので深くは書きません。

また、americanbossさんの回答は、この後にheader("Location: $string")とつけたせばke_ishiさんの回答と全く同じです。

foo.php内でvalueの値を取得するだけであれば、ke_ishiさんのように$_GETを使用する方が効率的です。

A+Dの場合、

これはもう単に、foo.phpにおいて、$_GET['key']を使用して処理を振り分ければすみます。

B+Cの場合、

これは単に、

ディレクトリを作ればすみます。

さて

>整形したURLを元の動的(引数付き)なURLの時と同じように動かしたい

とのことですが、ここがよく分かりません。

元の動的(引数付き)URL=

で使用できる引数は、keyとvalueです。正確には引数keyの値がvalueです。

このままであれば、foo.phpでは、keyの有無での分岐(if(isset($_GET['key']))と、valueの値による分岐(switch $_GET['key'])だけです。

これは、私の先の回答でif(isset($foo[1]))とswitch $foo[1]とすれば同じように分岐処理できます。

keyがmailの時はvalueが宛先を意味し、keyがviewの時はvalueが表示ページを意味するようにしたいのであれば、zizz_wallaさんの方法が利用できます。

しかし、americanbossさんの回答で整形ができたということは、keyは常に一定だと思いますので、私の先の回答で問題ないと思います。

以上、他の方の回答も含めて、お望みの結果は得られるのではないかと思うのですが、不明な点があるようでしたら、具体的に処理内容例として出していただければ、お役に立てるかもしれません。

回答は2回までしかできませんので、以後、必要であれば終了後のいわし(掲示板)か、私のダイアリーででもお付き合いします。(規約違反かも・・・)

蛇足。

お分かりでしょうが、質問文のxxx.phpをfoo.php、xxをkey、**をvalueに変更して回答しています。

長文、再回答失礼いたしました。

id:ska-ken

親切なご回答ありがとうございます!現在のところ.htaccessのmod_rewriteを利用して実現しています。ただ本件に対して自身がまだまだスキル不足なので、是非PATH_INFOの方でもszknさんのご意見を参考にチャレンジしてみます。ありがとうございました。

2004/12/16 11:48:39
id:moritamasahiro No.8

moritamasahiro回答回数190ベストアンサー獲得回数02004/12/16 08:30:10

ポイント15pt

>この整形したURLを元の動的(引数付き)なURLの時と同じように動かしたいと思っているのですが。ご存知の方お願いいたします。

引数をtemp.incなどのファイルに書き込んで、PHPでinclude文で読み込めば、引数を渡したのの同様の動作にすることができます。

id:ska-ken

ありがとうございます!この方法も試してみます。今回は、.htaccessで整形したURLに(整形前)http://xxx.xxx.xxx/xxx.php?xx=** → (整形後)http://xxx.xxx.xxx/xxx/xx/$xx/ や http://xxx.xxx.xxx/xxx/xx/$xx.htmlとして、PHP内で動的にアクセスすることで実現できました。ご回答して頂いた皆さんありがとうございました。

2004/12/16 12:16:28

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

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

トラックバック

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません