Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在本地主机和web服务器上实现绝对URL?_Php_Url_Webserver_Localhost_Hyperlink - Fatal编程技术网

Php 如何在本地主机和web服务器上实现绝对URL?

Php 如何在本地主机和web服务器上实现绝对URL?,php,url,webserver,localhost,hyperlink,Php,Url,Webserver,Localhost,Hyperlink,我通常使用以下链接实践,例如: 但我将实现绝对URL: <a href="http://example.com/relative/path/to/document.html"> 对我来说,更改它们(在HTML文档中自动查找和替换)不是问题 但是要确保它在我的本地主机(支持PHP)和网络上都能正常工作,最好的做法是什么?为什么 例如,我如何使用PHP包括: <?php include($_SERVER['DOCUMENT_ROOT']."/relative/path/

我通常使用以下链接实践,例如:


但我将实现绝对URL

<a href="http://example.com/relative/path/to/document.html">

对我来说,更改它们(在HTML文档中自动查找和替换)不是问题

但是要确保它在我的本地主机(支持PHP)和网络上都能正常工作,最好的做法是什么?为什么


例如,我如何使用PHP包括:

<?php include($_SERVER['DOCUMENT_ROOT']."/relative/path/to/document.html"); ?>


href
URL采用相同的方法?不同的PHP技术更好吗?想知道为什么。

在本地和web主机上保持相同的目录结构,并尽可能使用相对URI和路径。 如果必须使用绝对URI,请在某处定义它一次,并在需要输出URI时使用常量,以避免使用find和replace进行更改

<?php
    define('ROOT_URI', 'http://example.com/subdirectory');
?>

<a href='<?php echo ROOT_URI; ?>/relative/path/to/document.html'> document </a>


如果您有一个配置文件或其他仅定义一次的包含文件,则会更容易。

您只需在HTML HREF中包含一个预定义的常量或变量即可

e、 g


这一切都取决于您计划如何托管内容。PHP是一个不错的选择,因为有很多托管公司支持PHP。如果没有像PHP这样的脚本语言,最好的选择是javascript,但这取决于您为什么试图使URL成为绝对URL,这可能会违背您的目的

我建议您创建一个配置文件,因为您可能依赖于$\u服务器['DOCUMENT\u ROOT'],也可能无法依赖它

比如说:config.php

<?php
define("HOST", "http://example.com");
// Whatever else you might need on all files.

...

不必这样做,您可以将下面的行添加到头部标记。现在您可以给出相对于根的所有URL。现在,当您上传到服务器或在本地主机上工作时。只需在这里更改url

<base href="http://mydomin.com/" />

这是一个既适用于远程服务器又适用于本地服务器的解决方案,无需更改域名:

$protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'http://';
$url_base = $protocol . $_SERVER['HTTP_HOST'];
有了这两行代码,如果您更改了域名,就不需要更改代码,如果您在HTTP和HTTPS之间切换,也不需要更改代码。您可以随意更改变量名

因此,您的链接代码如下所示:

<a href="<?php echo $url_base; ?>/relative/path/to/document.html">link</a>
您还可以将其缩短一点:

$domains = array('domain.com', 'dev.domain.com', 'staging.domain.com', 'localhost');
$domain = in_array($_SERVER['HTTP_HOST'], $domains) ? $_SERVER['HTTP_HOST'] : 'localhost';

此定义的一个好位置是在配置文件中。每个部署都可以自定义环境。是否首选根URI和echo而不是include和DOCUMENT\u ROOT?为什么?感谢
DOCUMENT\u ROOT
是一个物理文件路径,对于您的
include
语句来说很好,但对于生成实际的URI来说却不是这样。看见此外,我刚刚将常量命名为
ROOT\u URI
,在我的示例中,您可以随意命名它(例如,在另一个答案中,常量命名为
HOST
)。我的建议是在本地计算机上创建多个虚拟主机,例如,
local.example.org
并编辑您的主机文件,使其解析为localhost。您是否尝试过
$\u SERVER['SERVER\u NAME']
$\u SERVER['HTTP\u HOST']
?据我所知,
HTTP\u HOST
并不是真的用于此目的?您在这个镇上必须快一点!谢谢是否首选
定义
然后
回送
而不是
包含
文档根
?为什么?@Baumr
include
将文件加载到PHP文件中。它与您站点的URI无关。@rink.attendant.6抱歉,忽略这一部分-不想包含它。前两个是否比使用
$\u服务器['DOCUMENT\u ROOT'].
更受欢迎?为什么?但我不在这里寻找相对链接-就像您在配置文件的3路径深度链接中所做的那样?为什么我不能依赖DOCUMENT\u ROOT?如果webserver不是apache,环境变量可能不同。也许是PHP造成的,但我不认为它过去是。啊,在这种情况下是ApacheThank,但这不在问题的范围之内,因为URL不是绝对的。还有,虽然它在IE8中也不起作用
$protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'http://';
$url_base = $protocol . $_SERVER['HTTP_HOST'];
<a href="<?php echo $url_base; ?>/relative/path/to/document.html">link</a>
$domains = array('domain.com', 'dev.domain.com', 'staging.domain.com', 'localhost');
if (in_array($_SERVER['HTTP_HOST'], $domains)) {
    $domain = $_SERVER['HTTP_HOST'];
}else {
    $domain = 'localhost';
}
$domains = array('domain.com', 'dev.domain.com', 'staging.domain.com', 'localhost');
$domain = in_array($_SERVER['HTTP_HOST'], $domains) ? $_SERVER['HTTP_HOST'] : 'localhost';