2010-04-22 76 views
1

html <base>标签在浏览器支持方面是否安全使用?或者我应该使用PHP生成一个根路径,然后像这个<a href="<?=BASE?>somepage.html">somepage</a>这样组成一个绝对URL。html/php:如何处理绝对网址?

使用这样<base href="<?=BASE?>" />基本标签,我就能利用链接这样

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

现在我完全知道,这将是更容易只是这样做不使用基本标签:

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

但我该如何测试本地,然后用http://localhost/testsite/的基本URL?

编辑: 感谢球员,你的谁使计算器社区那么大:)

回答

1

正在添加回到这个问题,2年后,我现在认识到,处理绝对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; 
    } 
} 
1

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

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

非常最好。这使得您的站点独立于它安装在哪个目录中(您可能无法更改共享托管软件包上的虚拟主机设置)。如果需要,将图像文件外包给不同的服务器/子域也很容易。

<base>在浏览器支持方面使用是安全的,但我个人建议不要因为代码可维护性的原因而使用它。 <base>更改了URL处理方式的规则;您需要记住全部相对URL;并且很容易忽略。从编程的角度来看,这感觉就像一个肮脏的修复。

+0

所以你说我应该为每个链接添加一个基本目录? – 2010-04-22 18:34:45

+0

@Yuri我这样做,是的,但我开发的应用程序需要能够像'/ subdir/appname/index.html'这样的子目录中部署,因此它可以是'或''。你并不总是需要这个。如果您的问题仅限于您的本地测试环境,但是您的应用程序或站点无法以这种方式轻松使用子目录,那么Jimmy简单纠正虚拟主机的方法将会正常工作 - 路径将被硬编码为根目录。 – 2010-04-22 18:38:29

+0

答案接受,它的方式一直做了一段时间,我只是认为基地是一种方法来减少html的使用,但似乎没有真正的出路,除非我使用这种和jimmys技巧的混合。 – 2010-04-22 18:45:20

1

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

+0

哦,我知道有一些简单的解决方案!如果我只知道如何设置一个虚拟主机...然后回到谷歌。但是如果我想更改域名/子域名呢? – 2010-04-22 18:33:54

+0

无论使用何种主机名访问网站,链接网址都不会更改。这是这种方法的优点。当您创建虚拟主机时,您可以设置它将使用的主机名。如果您需要更改它,就像更改配置文件一样简单。 – 2010-04-22 18:38:11

+0

有效点,现在我想我可以使用所有3个连接方法。基础链接,绝对链接和相关链接。 – 2010-04-22 18:42:35

1

你已经明确给出了这个想法,但我想再投入一些考虑。如果你正在编写一个Web应用程序,你应该以这样的方式构建它,以便将来可以将它安装到任何子目录中,并且它将继续工作而几乎没有变化。

这意味着href's,src's,action甚至HTTP Location头都需要知道这样的改变。这就是为什么我建议在<?php echo SITE_BASE ?>或其他任何你想称之为的前缀中加上你的uri。

有关SITE_BASE是否应该包含尾部斜线的争论很激烈。

+0

感谢您的回答,这清楚地表明,基地是不是要走的路。 – 2010-04-22 18:43:58