在Windows上使用PHP获取完整的URL并不起作用

时间:2016-09-12 15:54:21

标签: php windows iis-7 query-string

我正在尝试为我的网站构建语言切换,但是,由于托管必须是带有PHP的Windows IIS,我无法获取访问者查看的页面的完整URL。

说我在domain.com/page.php?id=23,我使用老式的

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

是一个空字符串。

所以我尝试了在stackoverflow上找到的解决方案来获取完整的URL

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

但仍然没有。我得到类似的东西:domain.com/page.php?在某些情况下和doman.com/?在其他人。

在这种情况下,是否有明确的方法来获取完整的网址?

非常感谢。

修改

似乎无法在该服务器上完成该操作。我解决了使用js + jQuery编写的客户端工作(我使用purl插件)....可怕:)这里是:

    $('.lang').each(function(){
        $(this).click(function(e){
            e.preventDefault();
            var lingua = $(this).find('a').data('lang');
            var url = window.location.href;
            var urlParts = purl(url);

            if (url.indexOf("?") >= 0)
            {               
                var queryString = urlParts.attr('query').split('&');
                var langIndex = queryString.indexOf('lang');

                if(langIndex > -1)
                {
                    queryString.splice(langIndex,1);
                    var newUrl = urlParts.attr('protocol')+urlParts.attr('host')+urlParts.attr('path')
                    window.location = newUrl + '&lang='+lingua;
                }                   
                else window.location = url + '&lang='+lingua;
            }
            else
                window.location = url + '?lang='+lingua;
        });     
    });

它似乎有效,即使我不明白为什么如果" lang"已经在查询字符串中,脚本无法识别它,并且每次单击链接时都会继续添加&lang。当然,无论如何它都可以工作,但是观看像&lang=en&lang=fr&lang=pl&lang=de

这样的网址是非常糟糕的

1 个答案:

答案 0 :(得分:0)

此行返回空

  <Checkpax xmlns="http://xml.api.com/test">
    <customerLevel>
        <customerDetails>
            <paxDetails>
                <surname>MUKHERJEE</surname>
                <type>A</type>
                <gender>M</gender>
            </paxDetails>
            <otherPaxDetails>
                <givenName>JOY</givenName>
                <title>MR</title>
                <age>11</age>
            </otherPaxDetails>
            <otherPaxDetails>
                <title>MR</title>
            </otherPaxDetails>
        </customerDetails>
        <staffDetails>
            <staffInfo/>
            <staffCategoryInfo>
                <attributeDetails>
                    <attributeType>NA</attributeType>
                </attributeDetails>
            </staffCategoryInfo>
        </staffDetails>
        <productLevel>
            <legLevel>
                <LeglevelInfo/>
                <legLevelIndicator>
                    <statusDetails>
                        <indicator>abc</indicator>
                        <action>1</action>
                    </statusDetails>
                </legLevelIndicator>
            </legLevel>
        </productLevel>
        <dummyRoottwo/>
        <CustomerLevel>
            <legLevel>
                <legLevelIndicator>
                    <statusDetails>
                        <indicator>cde</indicator>
                        <action>1</action>
                    </statusDetails>
                </legLevelIndicator>
            </legLevel>
            <dumTXFSep/>
            <dummySegmentJan />
            <dumTktFeb />
        </CustomerLevel>
        <dummyRootOne />
    </customerLevel>
</Checkpax>

因为它应该是这样的:

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

您需要键的引号....请参阅手册中的here