2011-12-06 8 views
4

私は2つのApache 2サーバーを実行しています。 1つはPHP5.2で、もう1つはPHP5.3です。 5.3マシンに$_SERVER['SCRIPT_URI']がある理由はありますか?

どこから来たのですか?それは明らかにApache環境からのものであり、PHPマニュアルには記載されていません。しかし、['HTTPS']['SERVER_NAME']および['REQUEST_URI']の組み合わせに便利なショートカットです。

私は設定ファイルを調べ、SOとウェブを検索しようとしました。

+0

私はあなたが "と他の人は5.3"を意味すると思いますか?あなたの質問については、申し訳ありませんが、わかりません。あなたはapache2のドキュメントの周りを見てきましたか? $ _SERVER []グローバルで利用できるもののAFAIKの多くは、サーバー自体によって決定されます。奇妙なことにマニュアルがそれを文書化していない... 5.3はしばらく外に出てしまった? – jammypeach

+0

ありがとう私はそのバージョン番号を修正しました! – Treffynnon

答えて

7

それはmod_rewriteのから来post on WebHostingTalkによると:

、あなたがのために、この をオンにするhttpd.confファイル内の仮想ホストに

RewriteEngine On

を追加し、 Apacheを再起動します。

+0

いいえ、そのトリックをしなかった。書き換えエンジンが私のシステム上にあり、私のWebページは仮想ホストの中にあります。しかしそれにもかかわらず、それは動作しませんでした。 – flu

+0

これは私のために働いた。私はサイトのhttp設定ファイルに設定する必要がありました。 – dgig

0

私が知る限り、$_SERVER['SCRIPT_URI']は、PHPをCGIとして実行している場合にのみ利用できます。私はあなたの2つのPHPインストールの違いでなければならないと思います。

+0

私のサーバはSCRIPT_URIを設定していますが、php_sapi_name()はapache2handlerを報告します。 (mod_phpとPHP 5.4、Fedora 18のApache 2.4) – Greg

+0

これは私には当てはまりません:PHPをmod_phpとして使用していて、SCRIPT_URIが定義されています。 –

3

Plesk12、PHP 5.6.6を使用してCentOS 7に移動してから書き直しました。 SCRIPT_URIはありませんでした。 そして、私がこの回避策を書いたいくつかの状況で使用することがとても素敵です理由:

if(!isset($_SERVER['SCRIPT_URI'])){ 
    $_SERVER['SCRIPT_URI'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

    $pos = strrpos($_SERVER['SCRIPT_URI'],'/'); 
    if($pos!==false) { 
     $_SERVER['SCRIPT_URI'] = substr($_SERVER['SCRIPT_URI'], 0, $pos+1); 
    } 
} 

私は総専門家ではないよと、それを差し込む前に、特定のアプリケーションにこのコードを確認してください私のシステムでは、それはそうです。完璧に働く私はindex.phpやその他のヘッドエリアに置いています。

関連する問題