2012-02-13 46 views
1

私はローカルホスト上で正常に動作していた何かを設定している共有ホスティングサーバーで作業していますが、この動作の原因は何か不思議です。PHP PATH_INFOが書き換え後に設定されない

if(isset($_SERVER['PATH_INFO'])) 
{ 
    echo $_SERVER['PATH_INFO']; 
} 
else 
{ 
    echo "No Path"; 
} 
die; 

http://example.com/testing出力「いいえパス」
を訪問:私はデバッグ目的のために簡単なチェックを設定しているのindex.phpに

RewriteEngine On 
RewriteCond %{REQUEST_URI} \..+$ 
RewriteCond %{REQUEST_URI} !\.html$ 
RewriteRule .* - [L] 
#Redirect to front controller 
RewriteRule ^(.*)$ index.php/$1 [QSA,L] 

:私はフロントコントローラにApacheとmod_rewriteの持つURLをリダイレクトしています 訪問http://example.com/index.php/testing出力/テスト

このリダイレクトはローカルホストで意図したとおりに動作していましたhttp://example.com/testing出力 "/ testing"

これを引き起こしている可能性があることは誰でも知っていますか?このリダイレクトを行う一般的な方法は、ホストからホストに発行される可能性は低いですか?

EDIT:それぞれ$_SERVER['PATH_INFO'], $_SERVER['ORIG_PATH_INFO'], $_SERVER['PHP_SELF'], $_SERVER['REQUEST_URI']を出力

を示しています

path: 
orig: /testing 
self: /index.php 
uri: /testing 

どう処理はこれを引き起こすことが行われていますか? ORIG_PATH_INFOはより信頼できますか?また、REQUEST_URIも正確であるようですが、それはより適切な変数ですか?

答えて

2

URLは重要な部分です。 http://example.com/testingでアクセスすると、ファイル名とクエリ文字列の間に何もありません。

実際の スクリプトファイルの末尾にあり、利用可能な場合はクエリ文字列に先行するクライアント提供のパス名情報が含まれます。 インスタンスの場合、現在のスクリプトがURL http://www.example.com/php/path_info.php/some/stuff?foo=barでアクセスされた場合、 $ _SERVER ['PATH_INFO']には/ some/stuffが含まれます。

- >http://www.php.net/manual/en/reserved.variables.server.php

+0

はい、これはindex.php/$ 1にリダイレクトされています。これはhttp://example.com/index.php/testingになり、ファイル名の後ろに(存在しない)クエリ文字列。 –

+0

しかし、ページはhttp://example.com/testingでアクセスされます(書き換えは内部的に行われます)。 – MasterCassim

1

私は、共有サーバー上の私のコードを展開した後に同じ問題がありました。私はすべてのグローバルを見て、スクリプトを書いて、

ORIG_PATH_INFO

は私の地元のdevのボックスにPATH_INFOにあるように使用される情報が含まれていることを発見しました。

私は既にホスト固有の設定ファイルを持っていました。私がしなければならなかったのは、新しいホスト固有のパラメータ(PathInfoName)を追加することでした。ローカルボックスではPATH_INFOに設定され、共有ホストではORIG_PATH_INFOに設定されます。

問題を修正しました。

関連する問題