[英]Getting full URL with PHP on Windows doesn't work
我正在尝试为我的网站构建语言切换,但是,由于托管必须是带有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/? 在其他人。
在这种情况下,是否有明确的方法来获取完整的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'];
你需要一个按键报价....看到这里的说明书中无。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.