path_infoを使わずに、PHPの引数を渡す方法はあるのか?

このQ&Aのポイント
  • path_infoを使用せずに、phpのファイル名を書かずに引数を渡す方法があるのか疑問に思っています。
  • tinyurl.comのように、引数を指定してリダイレクトする方法を再現しようと思いましたが、どうやって引数を渡すのかわかりません。
  • 高度な技術を使用しているのかもしれませんが、url配下に置いたindex.phpに引数をどうやって渡すのか知りたいです。
回答を見る
  • ベストアンサー

path_info??phpのファイル名を書かずに引数を渡すには・・・

畏れ入ります。 phpのファイル名を書かずに引数を渡す方法があるのでしょうか? tinyurlというページがあるのですが、 tinyurl.com/index.phpとしてもアクセスできるのでおそらくphpが動いているのだと思います。 アクセスするとわかると思うのですが、 tinyurl.com/6のようにアクセスすると、”6”を引数にして phpで、"6"に該当するページにリダイレクトしているのだろう・・・と なんとなく思っていました。 しかし、いったいどうやって引数を渡しているのか再現してみよう、 と思ったら出来ませんでした(汗 path_infoというのを使えば http://url/index/6 というような感じで”6”を渡せるだろうと思うのですが、 http://url/6 としてurl配下に置いたindex.phpに”6”をどうやって渡せるのでしょうか? もしかしてかなり高度な技術を使っているのでしょうか?? もし何か気がつきましたら教えていただけると助かります・・・

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

path_infoは使ったことが無いですが、良く使われるのはapacheのmod_aliasやmod_rewriteなどじゃないかな?と思います。 例えば、 ScriptAlias .* /var/lib/html/index.php #この記述はhttpd.confや.htaccessなどに記載する物です。 こんな風に書いておくと、全てのアクセスにおいてindex.phpが動いたりすると思います。 ■mod_alias http://httpd.apache.org/docs/2.0/ja/mod/mod_alias.html Alias ScriptAlias AliasMatch ScriptAliasMatch ■mod_rewrite http://httpd.apache.org/docs/2.0/ja/mod/mod_rewrite.html RewriteRule これで http://url/6だろうが、http://url/path/6だろうが、全て同一のPHPが受け取ったりします。 特定のpathだけ動的にしたい場合などは正規表現を使って設定したりします。 ScriptAliasMatch /path/ /var/lib/html/index.php こんな感じでしょうか。 そして、6という値を引数として受け取りたい場合、$_SERVER['REQUEST_URI']などを分割して取得します。 http://url/6なら、 //index.phpで書くものです。 $a = split("/", $_SERVER['REQUEST_URI']); $value = $a[1]; こんな風にして取得します。

azicyan
質問者

お礼

ご丁寧にありがとうございます。 質問したあと色々調べていて、おっしゃるとおり mod_rewrite というので実現できることがわかり、ある程度成功しました! mod_aliasという方法はわかりませんでした。もうすこし調べてみます! ところでmod_rewriteの設定ファイルの書き方で少しわからない部分がありました。 畏れ入りますが、そちらの方もご教授いただけると助かります・・・汗 補足に書き込みます。 ぜひよろしくお願いいたします!

azicyan
質問者

補足

すいません。コチラです。 http://okwave.jp/qa3641926.html ruleに書く正規表現のところが間違っているのだと思うのですが・・・

関連するQ&A

  • phpでのURL取得について

    phpにて、ソース内のURLを取得するプログラムを作っています。 その中に短縮URLが混ざっており、取得しても例えば“http://tinyurl.com/?aaa”のような形になってしまいます。 この“http://tinyurl.com/?aaa”が“http://www.yahoo.co.jp/index.html”の短縮URLなら“http://www.yahoo.co.jp/index.html”の形で取得したいのですが、phpで可能でしょうか?

  • php化して、.htaccessでリダイレクトしたが、index.phpが強制的に表示されてしまう

    1.トップページをhtmlからphpに変更しました。 旧)http://www.hoge.com/index.html 新)http://www.hoge.com/index.php 2.「.htaccess」に301リダイレクトを記述しました。 Redirectpermanent /index.html http://www.hoge.com/index.php 3.困ったこと http://www.hoge.com/ でアクセスしたときに http://www.hoge.com/index.php に転送されてしまう。 できれば、 http://www.hoge.com/ このまま表示してほしいんですが、 .htaccessの記述に問題があるのでしょうか? すみません、分かる方には簡単なのかもしれませんが、 教えて頂ければ助かります。

    • 締切済み
    • PHP
  • PATH_INFOを使って静的URLを形成しているのですが

    PATH_INFOを使って静的URLを形成しているのですが URLのホスト名直下に任意の名称を付けてアクセスしたいのですが 例 www.aaaa.com/abcede www.aaaa.com/bcedef このように任意の名称を割り付けてアクセスできるようにしたいのですが いい方法はないでしょうか? 実際にフォルダーを作成する方法は現実的ではないと思うのですが? また以上が無理なら www.aaaa.com/?abcede といった方法が考えられますがスラッシュは省略できないでしょうか? www.aaaa.com?abcede でアクセスすると自動的にスラッシュが付いてしまいますが方法はないでしょうか。 できましたら、これらを実現できる方法をアドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • ファイル単位でのアクセス制限

    特定のURLにアクセスした際、日時で表示するページを切り替えられるようPHPを使用しました。 index.php に include を記述し、条件分岐で切り替え用のページを読み込む方法です。 ここまでは上手く行ったのですが、直接URLを打ち込んでアクセスすると、意図しないページであっても表示されてしまいます。 存在するURLに直接アクセスしてしまっても、index.php にアクセスするようにして、必ず正規の手順を踏むようにしたいと考えています。 切り替え用のページは、現状、html のままです。 これを php にして index.php にリダイレクトさせてはと思ったのですが、何の工夫もなくやるとループしてしまいますよね… どのような方法が考えられるものでしょうか? 宜しくお願い致します。

  • urlencodeしていない日本語をPATH_INFOで

    お世話になっております。 Wikipedia等のようにアクセスする際にURLに直接書いた日本語を PATH_INFOで受け取って処理をしたいのですが、うまくいきません。 試しに、 echo $_SERVER['PATH_INFO']; echo mb_convert_encoding($_SERVER['PATH_INFO'],"utf-8","sjis"); echo urldecode(mb_convert_encoding(urlencode($_SERVER['PATH_INFO']),"utf-8","sjis")); とした、BOM付UTF-8のPHPファイルに、 http://~/test.php/日本語 で[日本語]を色々変えてアクセスすると、 一行目と三行目は同じ結果になり、二行目だけ異なった結果となります。 一・三行目が上手く表示された時は二行目が文字化けしており、 一・三行目が文字化けした時は二行目が正常に表示されています。 (全てが文字化けすることもあります) どのようにすれば文字化けが起こらず、うまく受け取れるのかが分かりません。 本当はUTF-8ではなく、EUC-JPで行いたいのですが EUCはほとんどの場合、文字化けしてしまいます。 どのようにすれば良いのでしょうか。ご教授を宜しくお願い致します。 なお、php.iniは変更できません。

    • ベストアンサー
    • PHP
  • 引数処理に$ENV{'PATH_INFO'}を用いた際のクッキーについて

    自作cgiの引数を $ENV{'PATH_INFO'}を用いた形式 (hoge.cgi/aaa/bbb/cccという形式)に変更しました。 ところが、組み込んでいるアクセス解析用のクッキーが 本来ならば hoge.cgiに対してクッキー1個となるはずですが、 hoge.cgi で1個目 hoge.cgi/aaa で2個目 hoge.cgi/aaa/bbb で3個目 hoge.cgi/ccc で4個目  ・・ と、引数が変わるたびに発行されてしまいます。 ブラウザで確認すると同じ内容のクッキーが アクセスした際の引数の分だけズラズラと羅列されています。 本来あるべき形である hoge.cgiに対してクッキー1個にするには どのようにしたら良いのでしょうか。

    • ベストアンサー
    • CGI
  • phpをshellから起動する際に引数を渡したい

    cronを使用してphpを起動するのですが、その際に引数を渡したいです。 webでアクセスする際は http://www.example.com/index.php?a=b とすることで $_GET['a'] に 「b」という値が入りますが、 これをshellで作成したいのです。 どなたかご存知の方教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルのパスについて

    下記のような構成でプログラムを組んでいます。 ([d]=ディレクトリ、[f]=ファイル) test[d] ├ test_dir[d] │ └ index2.php[f] │ ├ test_dat[d] │ └ data.dat[f] │ ├ index.php[f] └ common.inc[f] common.incにはindex.php、index2.php双方で使う共通関数が入っており、data.datのデータを読み込みます。 その際に、common.incの中でdata.datへのパスを"./test_dir/data.dat"設定しておくと、index2.phpでは「No such file or directory」と言われます。 有用な情報かは分かりませんが、common.incの読み込みにはinclude_onceを使用しています。 index2.phpから見ると当然そのパスは存在しないので理屈は分かりますが、解決方法が思い浮かびません。 引数でdata.datへのパスを渡せば問題なく動くと思いますが、出来ればcommon.inc内で解決したいと考えています。 何か良いの解決策は無いでしょうか?すいませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでクッキーを使用して

    たとえば http://test.com/index.php?id=a01 でアクセスした場合a01という引数をクッキーに保存し、 その引数を画像ファイル名やインクルードファイル名に使用し、 a01専用のデザイン、要素に変えるということをしています。 わかりにくいかもしれませんが、つまり、 お客さんによってヘッダーやフッターだけはお客さん用に、 変えて共通で使える部分は共通で使っているということです。 そこで、問題なのですが、 http://test.com/index.php?id=a01でアクセスした場合、 以降、どのページ移動しようが、クッキーに保存しているので、 ヘッダーやバナーは引き継がれたままなのですが、 http://www.test.com/index.php?id=a01(ホスト名が付いている) でアクセスするとまた別のクッキーとして新たに登録されていまい、 困っています。どちらからアクセスしてもひとつのクッキーとして 保存したいのですが、何か良い方法はないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScriptの引数について教えて下さい

    以下のページのように画像タブ切り替えをやりたいと考えています。 http://purazumakoi.info/sample/html/tabchange/index.html 上記ページの「内部遷移1」「内部遷移2」「内部遷移3」の いずれかをクリックするとリンク先URLに ?page=1等の引数が 付与されると思うのですが、これをリンク元のURLで設定せず、 リンク先ページのHTML内に引数を設定して初期表示するタブを 任意に切り替えたいのですが書き方がわかりません。 初歩的な質問で恐縮ですが、どなたか教えていただけませんか? よろしくお願いします。

専門家に質問してみよう