• ベストアンサー

$ENV{'REQUEST_URI'} の値を統一するには

先ほど気がついたのですが $ENV{'REQUEST_URI'} が ローカルと サーバー上で 扱いが違うので 統一したいと思います 設定を変更をするにはどうすればいいのでしょうか? .../abc.cgi?a=1 だとすると ローカルでは ?より前が返ってきます。  .../abc.cgi サーバーでは ?以降もいっしょに返ってきます・・・  .../abc.cgi?a=1 値が違うので。。。 常に?以降を切り取るようにすればいいかもしれないですが...... 簡単に設定で済む方法があればよろしくお願いします

noname#21216
noname#21216
  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> $ENV{'REQUEST_URI'} = (split('??', $ENV{'REQUEST_URI'}))[0]; 連想配列%ENVへの書き込みが許されてない環境なのかも、 いったん別変数(ex. $req_uri=split...)に書き出す形にしてみては。

noname#21216
質問者

お礼

返信ありがとうございます。 書き方がわるかったのですみません。 $ENV には書き込み可能です $ENV{'REQUEST_URI'} = (split('\?', $ENV{'REQUEST_URI'}))[0]; で 同じ値になるようにとりあえず調整しています。

その他の回答 (2)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

質問を勘違いしてました。 ?以降ではなく、?の前だけが欲しいんですね。失礼しました。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

真っ先に思いつくのは $ENV{'REQUEST_URI'} ではなく $ENV{'QUERY_STRING'} を参照した方がよいのではないかと。→参考URL $ENV{'REQUEST_URI'}にこだわるらその理由と、ローカル/サーバのサーバソフト(ApatchとかAnHttpd?)を補足してください。設定といってもサーバソフトによってできるかできないか、またその手段も異なると思いますので。

参考URL:
http://www.futomi.com/lecture/form/#s3
noname#21216
質問者

お礼

返信ありがとうございます サーバーは FreeBSD 4.10 Apache/1.3.33 (Unix) です。 ローカルは、windows+Anhttpdです。

noname#21216
質問者

補足

設定がわからないので プログラムの最初の方で 条件文で  サーバーにあるときは、切り取るようにしました。 $ENV{'REQUEST_URI'} = (split('\?', $ENV{'REQUEST_URI'}))[0];

関連するQ&A

  • REQUEST_URIなどの環境変数の値を見たい

    REQUEST_URIやQUERY_STRINGなどの環境変数の値を直接確認したいです。 しかしphpなどの言語でなくlinuxの命令やapacheのディレクティブで出力するなどで知る方法はないでしょうか。 またphpでREQUEST_URIなどを確認した場合それはapacheのディレクティブ処理時の値と同じという保証はあるのでしょうか。 もう一つ、apacheをローカルで動作させている場合REQUEST_URI中でQUERY_STRINGに相当する部分が無いということはありうるでしょうか。 どれか一つでも助言頂けると助かります。

  • empty($_SERVER['REQUEST_U

    empty($_SERVER['REQUEST_URI'])とは、何のことでしょうか? 下記スクリプトの意味について教えてください。 // // Fix unavailable $_SERVER['REQUEST_URI'] on IIS // if ( empty($_SERVER['REQUEST_URI']) ) {  $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];  $_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; } ▼if ( empty($_SERVER['REQUEST_URI']) ) { $_SERVER['REQUEST_URI']が空だったら、の意味が分かりません。 ページにアクセスするためのURIを指定しなかったら? それは、どんな状況なのでしょうか? ▼$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF']; $_SERVER['REQUEST_URI']に、現在実行しているスクリプトのファイル名を利用。これは、何をしているのでしょうか? ▼$_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; クエリ情報(URLの"?"以降の文字列)が空でなければ、クエリ情報をくっつける。空だったら、くっつけない 結局、このスクリプトでは何をしようとしているのでしょうか? また、このスクリプトがないと、どういう不具合が起きる可能性があると、想定されるでしょうか? 検索してみたら、下記のようなページがあったのですが、 IIS(サーバ?)固有の不具合回避対策なのでしょうか? ▽Dokeos Forum • View topic - IIS $_SERVER['REQUEST_URI']   http://www.dokeos.com/forum/viewtopic.php?t=8335

    • ベストアンサー
    • PHP
  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • たまに$_REQUESTの値が消える

    携帯サイトを開発しており、自身では煮詰まってしまった為質問させていただきます。 携帯サイトのためsessionを使用せず、認証(一応閉ざしたサイトです)にはREQUESTでキーになる値を常に次のページに渡しながらログイン状態を維持させています。 ところがREQUESTで同じKEYを渡しているにもかかわらず、ログイン状態が維持されなくなってしまいます。 維持されなくなったときの状態としては、URLに通常ならhttp://****.com/index.html?let=abc →abcがログインの為のキー。 となっているのに http://****.com/error.html?SID となってしまっています。 error.htmlはエラー用ページですので動きとしては正しいです。 REQUESTで渡しているkeyはいつも同じであり、タイミングによってログイン状態が維持されたりしなかったりで原因がつかめず困っています。 対象ディレクトリの.htaccessファイルには下記の設定をしています。 php_flag session.use_trans_sid Off php_flag session.use_cookies On php_flag session.use_only_cookies On php_flag session.auto_start Off (これらの設定を入れる前からエラーは発生しましたが) なにか原因がお分かりになる方、教えてください。

    • ベストアンサー
    • PHP
  • SSIで呼び出したURLの取得

    a.shtmlから ../a.cgi をSSIで呼び出したとき、a.shtmlのURLを取得したいのですが、うまい方法はありますでしょうか。 $ENV{'REQUEST_URI'} $ENV{'SCRIPT_FILENAME'} $ENV{'SCRIPT_NAME'} で表示してみたら、a.cgiのURL(パス)が出てきて、a.shtmlのURL(パス)が出てこなかったのです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Ajax.Requestについて

    いつもお世話になっております。 今回はAJAXについてお聞きしたいです。 現在prototype.jsを使って同期通信をしようとしています。 リクエスト部分のソースは以下のようです。 function AjaxLoad() { new Ajax.Request('abc.cgi',         {         method : 'post',         asynchronous : false,          }         ) response = transport.responseText; hyouzi(response); } abc.cgiというものは処理をして値を返すcgiです。 同期通信したのちにその返された値をhyouzi();で使いたいです。 ここでこのAjaxLoad()を呼び出すとtransportはありませんというようなerrorが出ます。 それ以前にabc.cgiを呼んでいるような感じがしません。 上記のような処理をしたい場合はどのように記述すればよいのでしょうか? ご教授願います。

  • htaccessのマッチが失敗します

    下記のように書いていますがうまく動作しません。 どのように手直しすればうまくいきますでしょうか??? hostname/abc_abc_ab_abc.html というテストを作ってみたのですが、本来であれば、abc3.cgiへ渡されるはずなのですが、全て、all.cgiへ渡されてしまいます。 お分かりになる方、宜しくお願い致します。 RewriteEngine on RewriteBase / ##リクエストURI中に、abcという文字列が3回以上ならabc3.cgiを動作させる RewriteCond %{Request_URI} "^(abc){3,}$" [NC] RewriteRule ^(.+)$ abc3.cgi?$1 [L] ##リクエストURI中に、abcという文字列が1から2回ならabc12.cgiを動作させる RewriteCond %{Request_URI} "^(abc){1,2}$" [NC] RewriteRule ^(.+)$ abc12.cgi?$1 [L] #どれにもマッチしない場合、all.cgiを動作させる。 RewriteRule ^(.+)$ all.cgi?$1 [L]

    • ベストアンサー
    • Perl
  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 (1)画面A(http)から「カート入れる」ボタンをクリックし、画面B(https)に遷移 (2)画面Bに遷移した際にcookieに取得、保存 要するにhttpsでセットしたものをhttpsゲットしようとしています。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 【WEB】サーバーとローカルでのURI設定ファイル

    WEBのデータをローカルからサーバーに上げるとき ベースのURI等のパスの指定の設定ファイルや、.htaccessファイルが 例えば ローカル向け設定 だと http://localhost/ なのに、公開サイト向け設定では http://hoge.com/ 等と、ローカルとサーバーで食い違い、 アップしても正しく表示されないことがあります。 アップの前にいちいち修正するのは面倒ですし、 ベースURI等が入ってる設定ファイルは、基本的にアップしないという方法を取ると、 厳選して、アップしなければならなかったり、間違ってアップしたりしてしまう可能性があります。 URI設定が含むファイルを ローカル、サーバー 特に意識することなく 管理する良い方法はないでしょうか?

    • ベストアンサー
    • CSS
  • フラグメント付きデータの受け取り方について?

    ApacheからPerlのCGIを以下の様に呼び出しています。  ~/cgi-bin/abc.pl?URI=/test/start.html#5000 呼び出したPerl側で$ENV{'QUERY_STRING'}を使用して、 ?以降のデータ部分を取り出すと、  URI=/test/start.html となってしまい「#5000」が欠落してしまいます。 「#5000」以下を欠落しなくする方法をご存じの方、 教えて頂けないでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう