2012-05-04 6 views
3

$_SERVER['REQUEST_URI']は、コンテキストパスでURIを返します。ウェブサイトのベースURLがhttp://localhost:8080/sitename/ある場合コンテキストパスなしでPHPリクエストURIを取得するには?

は、例えば、(すなわち、コンテキストパスは、サイト名である)、そしてIは$_SERVER['REQUEST_URI']http://localhost:8080/sitename/portfolio/designため、それは/sitename/portfolio/designが返される使用します。私はその後、私のきれいなURLを解釈するために、結果を爆発しています

$page=$_SERVER['REQUEST_URI']; 
$segments=explode('/',trim($page,'/')); 

$sitePage = $segments[1];//portfolio 

これは私のローカルテスト環境のために正常に動作しているが、本番サーバー上で、$segments[1]がために$segments[0]

になる必要があります開発と生産で同じコードを使用すると、この部分だけを取得する方法はありますか?/portfolio/design、つまりコンテキストパスのないURI?テストサーバーと運用サーバー上で同じになります

http://sitename.localhost:8080/ 

その方法(ウェブルートからの相対)絶対パス:あなたのテストサイトが上になるよう

答えて

9

あなたは、仮想ホストを使用することができます。

ハウツーは、使用しているテストサーバーによって異なります。

0

私はあなたが望むことをする方法であると言います - URIの一部を取得します。

私は、(あなたがApacheを使用していると仮定して)名前またはアドレスに基づいて仮想ホストを設定することをお勧めします。次に、http://127.0.0.42/portfolio/designのようなものがあります。ホストファイルの編集でさえもhttp://sitename/portfolio/designとなります。そうすれば、あなたの開発環境はプロダクション環境に似ています。

希望に役立ちます。

4

私はこのようなSCRIPT_NAMEREQUEST_URIを比較することによって、これを解決:

// /sitename/index.php 
$path = explode('/', trim($_SERVER['SCRIPT_NAME'], '/')); 

// /sitename/portfolio/design 
$uri = explode('/', trim($_SERVER['REQUEST_URI'], '/')); 

foreach ($path as $key => $val) { 
    if ($val == $uri[$key]) { 
     unset($uri[$key]); 
    } else { 
     break; 
    } 
} 

// portfolio/design 
$uri = implode('/', $uri); 

私はあなたが助け

希望をindex.phpに.htaccessのルーティングを持って推測しています。

関連する問題