如果在 href 属性内,base_url() 给出错误的 link
base_url() gives wrong link if inside href attribute
我刚开始学习Codeigniter 3.1.7,遇到了一些奇怪的事情。
我的站点安装在子目录 domain.com/site1
中,同时出现以下情况:
<h1><?php echo base_url(); ?></h1>
这会打印 domain.com/site1/
<h1><a href="<?php echo base_url(); ?>">Link</a></h1>
这会生成一个 href = domain.com/site1/domain.com/site1
这怎么可能?我错过了什么?
url 不会被 base_url() 返回两次。
如果您不指定协议,浏览器会将其视为相对协议 link,自动为其添加当前域和路径前缀。
一个正确的例子是这样的:
<h1><a href="//<?php echo base_url(); ?>">Link</a></h1>
根据 CodeIgniter 文档,您似乎也可以将协议作为第二个参数传递:
https://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url
注意:最好在里面使用//
,这样SSL就无所谓了。
使用 //
是更好的方法来自动检测它所处的环境并留在其中。
旁注:当运行宁本应在安全环境中运行的脚本时,还要确保没有http://
对脚本、图像、css,等等,因为这将包含一些浏览器会警告您的混合环境。
我刚开始学习Codeigniter 3.1.7,遇到了一些奇怪的事情。
我的站点安装在子目录 domain.com/site1
中,同时出现以下情况:
<h1><?php echo base_url(); ?></h1>
这会打印 domain.com/site1/
<h1><a href="<?php echo base_url(); ?>">Link</a></h1>
这会生成一个 href = domain.com/site1/domain.com/site1
这怎么可能?我错过了什么?
url 不会被 base_url() 返回两次。 如果您不指定协议,浏览器会将其视为相对协议 link,自动为其添加当前域和路径前缀。
一个正确的例子是这样的:
<h1><a href="//<?php echo base_url(); ?>">Link</a></h1>
根据 CodeIgniter 文档,您似乎也可以将协议作为第二个参数传递: https://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url
注意:最好在里面使用//
,这样SSL就无所谓了。
使用 //
是更好的方法来自动检测它所处的环境并留在其中。
旁注:当运行宁本应在安全环境中运行的脚本时,还要确保没有http://
对脚本、图像、css,等等,因为这将包含一些浏览器会警告您的混合环境。