如何在localhost和Web服务器上实现绝对URL?

时间:2013-01-17 03:06:38

标签: php url webserver localhost hyperlink

我通常使用relative URLs with an absolute URL path的以下链接做法:

<a href="/relative/path/to/document.html">

但我会实施绝对网址

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

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

但是什么是最佳做法以确保它在我的localhost (支持PHP)上以及在网络上上运行 / STRONG>?为什么?


例如,这里是我如何做PHP包括:

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

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

5 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:6)

您可以在HTML hrefs中包含预定义的常量或变量。

e.g。

<?php
define("LOCAL", "http://localhost");
define("WEB", "http://foo.bar");
$environment = LOCAL; //change to WEB if you're live
?>
<a href="<?php echo $environment; ?>/relative/path/to/document.html">

答案 2 :(得分:3)

这一切都取决于您计划如何托管内容。 PHP并不是一个糟糕的选择,因为有大量的托管公司支持PHP。如果没有像PHP这样的脚本语言,你最好的选择就是使用javascript,但这取决于你为什么试图使URL绝对,这可能会破坏你的目的。

我建议做的一件事是制作配置文件,因为您可能或可能无法依赖$ _SERVER ['DOCUMENT_ROOT']。

说:config.php

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

然后每个需要它的文件,把它放在顶部

<?php
include_once(dirname(__FILE__)."/config.php");

// Keep in mind this path is relative to current file, so if you are 3 sub-folder keep
// include_once(dirname(__FILE__)."/../../../config.php")
?>

...

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

答案 3 :(得分:0)

您可以在头标记中添加以下行,而不是这样做。现在,您可以根据您的根提供所有网址。现在,当您上传到服务器或在localhost上工作时。只需在这里更改网址。

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

答案 4 :(得分:0)

以下解决方案适用于远程服务器和本地服务器,无需更改域名:

$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>

关于安全的重要更新:

此解决方案存在安全风险。这是一个article on it

  

$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']变量可以是   通过在访问网站时发送不同的主机标头进行更改:

     

curl -H "Host: notyourdomain.com" http://yoursite.com/

     

这样做,使用$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']的任何网址都会   使用notyourdomain.com。

     

进一步考虑,想象一下攻击者填写密码重置   使用您的电子邮件表单并更改主机标头。密码重置   然后,电子邮件会将您引导至他们的网站如果你在关注   到域,你很好,但普通用户不这样做,这就是原因   网络钓鱼攻击工作。

因此请谨慎使用或更好地避免使用它。

以下是处理链接文章中多种环境的方法:

  

在处理多个环境时,您可以使用   $_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME'],但仅限于检查   您正在使用哪个域,然后手动设置正确的URL。您   可以通过一系列有效域来保持简单:

$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';