簡體   English   中英

在Windows上運行的PHP5中獲得$ _SERVER [“ REQUEST_URI”]

[英]Get $_SERVER[“REQUEST_URI”] in PHP5 running on Windows

它似乎並不簡單。 我使用這個流行的功能來獲取頁面的完整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'];
        }
    }
}

但是,這有點奏效。 我的完整網址是:

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

奇怪的是,我是通過上面的函數得到的:

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

這就是所謂的“ directory1”,這是我的domain.com映射到的物理目錄。 我了解其中的含義,但是...如何像使用JavaScript那樣使用document.location.href輕松獲得完整的URL,而無需進行任何修復,調整等?

謝謝

嘗試這個:

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

但是,它不會捕獲錨點(在井號#標簽之后)

回答我的問題:這對我有用:

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;
}

如果在任何特殊情況下可能會失敗,請寄給我任何想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM