3

$_SERVER['REQUEST_URI']コンテキスト パスを含む URI を返します。

たとえば、Web サイトのベース URL がhttp://localhost:8080/sitename/(つまり、コンテキスト パスがサイト名) で、$_SERVER['REQUEST_URI']forを使用すると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 のみを取得する方法はありますか?

4

3 に答える 3

9

仮想ホストを使用して、テスト サイトを次の場所に配置できます。

http://sitename.localhost:8080/

そうすれば、絶対パス (Web ルートからの相対パス) は、テスト サーバーと運用サーバーで同じになります。

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

于 2012-05-04T17:13:43.540 に答える
4

私はこれを比較SCRIPT_NAMEしてREQUEST_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 ルーティングがあると思います

それが役立つことを願っています。

于 2012-10-23T23:30:11.003 に答える
0

それがあなたが望んでいたことをする方法だと思います-URIの一部を取得します。

名前またはアドレスベースの仮想ホストを設定することをお勧めします(Apacheを使用していると仮定します)。次に、 http://127.0.0.42/portfolio/designのようなものにするか、システム上のホストファイルを編集してhttp://sitename/portfolio/designにすることもできます。その後、開発環境は本番環境に似たものになります。

それが役立つことを願っています。

于 2012-05-04T17:21:46.620 に答える