我通常使用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技术更好吗?很想知道为什么。
答案 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';