html / php:如何处理绝对网址?

时间:2010-04-22 18:27:36

标签: php html url anchor root

html <base>标记在浏览器支持方面是否可以安全使用?或者我应该使用PHP生成根路径,然后我添加像<a href="<?=BASE?>somepage.html">somepage</a>这样构成一个绝对URL。

使用像<base href="<?=BASE?>" />这样的基本标签我可以使用这样的链接

<a href="somepage.html">somepage</a>

现在我完全清楚,如果不使用基本标记,这样做会容易得多:

<a href="/somepage.html">somepage</a>

但是如何在本地测试然后使用基本网址http://localhost/testsite/ ???

修改 谢谢你们,你们让stackoverflow社区变得如此伟大的人们:)

4 个答案:

答案 0 :(得分:1)

我喜欢第一个选项,在PHP标签中输出基本目录

<a href="<?=BASE?>somepage.html">somepage</a>
最好的。这使您的站点独立于其安装的目录(您可能无法更改共享主机软件包上的虚拟主机设置)。如果需要,也可以很容易地将图像文件外包到不同的服务器/子域。

<base>在浏览器支持方面可以安全使用,但出于代码可维护性的原因,我个人强烈反对使用它。 <base>更改了处理网址的规则;您需要牢记所有相对网址的基础;而且很容易被忽视。从编程的角度来看,感觉就像一个肮脏的修复。

答案 1 :(得分:1)

我的建议是使用以斜杠开头的绝对URL,并设置一个使用/localhost/testsite/作为其文档根目录的虚拟主机。然后,您可以保留绝对网址,只需在http://testsite/本地访问您的网站。

答案 2 :(得分:1)

你肯定已经考虑过这个问题,但我想再考虑一下这个问题。如果您正在编写Web应用程序,则应该以这样的方式构建它,以便将来可以将其安装到任何子目录中,并且只需稍加更改即可继续工作。

这意味着href,src,action,甚至HTTP Location标头都需要知道这种变化。这就是为什么我建议将你的uri与<?php echo SITE_BASE ?>或你想要的任何内容一起使用。

关于SITE_BASE是否应该包含尾部斜杠,争论可能会激烈。

答案 3 :(得分:1)

两年后回到这个问题,我现在意识到处理绝对URL的最好方法是将URL放入包装函数,例如:

<a href="<?php echo url('/somepage.html');?>">somepage</a>

然后,包装器功能可让您完全控制URL处理

function url($url){
    if(strpos($url,'/')===0){
        return 'http://localhost/testsite'.$url;
    }else{
        return $url;
    }
}