2

それほど単純ではないようです。この人気のある関数を使用して、ページの完全なURLを取得します。

private function getBaseUrl() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
        $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}

私のPHP5はWindowsサーバー上にあります!そのため、$ _SERVER["REQUEST_URI"]は空です。私はWindowsでこの回避策を使用しました:

function fixRequestURI() {
    if(!isset($_SERVER['REQUEST_URI'])) {
        $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
        if($_SERVER['QUERY_STRING']) {
            $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
        }
    }
}

しかし、それはちょっとうまくいきます。私の完全なURLは次のとおりです。

http://www.domain.com/web/en/contact/

不思議なことに、私は上記の私の機能の結果としてこれを取得します:

http://www.domain.com/directory1/web/en/contact/index.php?go=3

これは、いわゆる「directory1」であり、domain.comがマップされる私の物理ディレクトリです。私はその意味を理解していますが... document.location.hrefを使用するJavaScriptのように、修正や調整などを行わずに完全なURLを簡単に取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

私の質問に答える:これは私のために働いた:

function getFullUrl() {     
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
        $pageURL .= "://";          
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER['HTTP_X_REWRITE_URL'];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER['HTTP_X_REWRITE_URL'];//$_SERVER["REQUEST_URI"] blank
    }
    return $pageURL;
}

特別な状況で失敗する可能性がある場合は、私に考えを送ってください。

于 2012-12-07T17:51:38.773 に答える
0

これを試して:

<?
function getUrl(){
    $http = 'http' . (@$_SERVER['HTTPS'] ? 's' : '');
    $query = $_SERVER['QUERY_STRING'] ? "?$_SERVER[QUERY_STRING]" : '';
    return "$http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]$query";
}

ただし、アンカーはキャッチされません(ハッシュ#タグの後)

于 2012-12-07T16:48:15.420 に答える