在Windows上使用PHP获取完整URL不需要';行不通
我正在尝试为我的一个站点构建一个语言开关,但是,由于宿主必须是一个带有PHP的Windows IIS,我无法获得访问者查看的页面的完整URL 假设我在domain.com/page.php?id=23上,我使用老式的在Windows上使用PHP获取完整URL不需要';行不通,php,windows,iis-7,query-string,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() {
$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/?在其他方面
在这种情况下,有没有一种确定的方法可以获取完整的url
多谢各位
编辑
这件事似乎无法在那台服务器上完成。我使用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这样的URL是很可怕的,这一行返回空的
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
因为它应该是这样的:
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
您需要对键进行引号…请参见手册中的内容。此行返回空值
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
因为它应该是这样的:
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
您需要对键进行引号…请参阅手册。getFullURL()是否返回了任何内容或只是一个截断的URL?它只返回domain.com,仅此而已。真令人沮丧你看到这个答案了吗?最重要的答案是在您似乎没有使用的IIS上使用$\u服务器['PATH\u INFO']
。在getFullUrl函数中尝试一下。@R.Chappell仍然是一个空字符串。也许您应该var\u dump($\u SERVER)代码>并查看您要玩什么。应该用一堆东西填充它,如果没有,那么您的服务器/主机可能有问题。getFullURL()是否返回了任何内容或只是一个截断的URL?它只返回domain.com,仅此而已。真令人沮丧你看到这个答案了吗?最重要的答案是在您似乎没有使用的IIS上使用$\u服务器['PATH\u INFO']
。在getFullUrl函数中尝试一下。@R.Chappell仍然是一个空字符串。也许您应该var\u dump($\u SERVER)代码>并查看您要玩什么。它应该用一堆东西填充,如果不是,那么你的服务器/主机可能有问题。顺便说一下,你的建议解决了部分问题。现在看来,如果我在一个没有查询字符串的URL上,它就可以完美地工作。另一方面,如果查询字符串已经存在,那么它就不起作用。它只是显示了旧的查询字符串。在Linux上,它可以像我那样编写。顺便说一下,你的建议解决了部分问题。现在看来,如果我在一个没有查询字符串的URL上,它就可以完美地工作。另一方面,如果查询字符串已经存在,那么它就不起作用。它只显示旧的查询字符串