http://xxx.xxx.xxx/xxx.php?xx=** → http://xxx.xxx.xxx/**/
できれば、上記のように整形したURLを実際のアクセス可能なURLとして利用する方法もお願いします。
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 の独り言
// [.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]に変換すれば現在のまま使えるはずです。
ありがとうございます!実践してみます。
xxx.phpの内容
$xx=$_GET[’xx’];
header(”location:
{$xx}/”);
exit;
ドキュメントルートにはアクセス可能なフォルダを作り、コンテンツを用意しておく。
てのが一番簡単でしょうね。
実際のURLとして活用する方法ですね。ありがとうございます。
http://ad.il24.net/~ura/tool/htaccess_maker.htm
404 Not Found
ここにアクセスしてみて下さい。設定をした後、ファイル生成ボタンを押すと、.htaccessファイルの内容が、自動生成されますよ。便利です。
便利なツールですね。ありがとうございます。.htaccessを作成する際には利用させて頂きたいと思います。
どのようにしたいか具体的なものが見えませんが、以下のようにPHPでプログラムを組んでみてはいかがでしょうか。
<?php
$hatena = ”
**”;
//**を求める
list($url, $qs) = explode(”?”, $hatena);
list($key, $value) = explode(”=”, $qs);
//ホストを求める
$parsed = parse_url($hatena);
$host = $parsed[”host”];
$string = ”http://”.$host.”/”.$value.”/”;
?>
ありがとうございます!上記を参考に分割して整形はできました。この整形したURLを元の動的(引数付き)なURLの時と同じように動かしたいと思っているのですが。ご存知の方お願いいたします。
http://naoya.dyndns.org/~naoya/mt/archives/001130.html
SEO 用 mod_rewrite ルールを生成する Webmaster Toolkit : NDO::Weblog
mod_rewriteを利用してやるなら下記が参考になります。.htaccessでもできます
「Webmaster Toolkit」ご紹介頂きありがとうございます!さっそく使ってみました。日本語版は無いですよね?
szknの日記
他の方もそうだと思うのですが、実現したい処理内容がやや不明確に思われるので、長くなりますが考えられるパターン全てについて回答します。
ポイント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に変更して回答しています。
長文、再回答失礼いたしました。
親切なご回答ありがとうございます!現在のところ.htaccessのmod_rewriteを利用して実現しています。ただ本件に対して自身がまだまだスキル不足なので、是非PATH_INFOの方でもszknさんのご意見を参考にチャレンジしてみます。ありがとうございました。
>この整形したURLを元の動的(引数付き)なURLの時と同じように動かしたいと思っているのですが。ご存知の方お願いいたします。
引数をtemp.incなどのファイルに書き込んで、PHPでinclude文で読み込めば、引数を渡したのの同様の動作にすることができます。
ありがとうございます!この方法も試してみます。今回は、.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内で動的にアクセスすることで実現できました。ご回答して頂いた皆さんありがとうございました。
ありがとうございます。是非ご参考にさせていただきます。