是否值得为每个客户端包含使用base_url()?

时间:2011-06-28 15:06:48

标签: php codeigniter

我使用CodeIgniter,我喜欢它,但我不知道这样做是否真的值得:

<link rel="stylesheet" href="<?php echo base_url(); ?>css/main.css" />
<script src="<?php echo base_url(); ?>js/jquery.js"></script>
<script src="<?php echo base_url(); ?>js/functions.js"></script>
...
<img src="<?php echo base_url(); ?>images/dolphin.png" />

而不仅仅是:

<link rel="stylesheet" href="/css/main.css" />
<script src="/js/jquery.js"></script>
<script src="/js/functions.js"></script>
...
<img src="/images/dolphin.png" />

第一种方法为页面增加了很多权重,但是当您决定在子文件夹中使用相同的应用程序时它是可靠的。

我应该选择哪一个?

4 个答案:

答案 0 :(得分:2)

如果您认为可能需要将应用程序移动到其他子文件夹(而不是其他子域),则可能值得使用<?php echo base_url(); ?>,但是如果您可以假设该应用程序将始终自行安装域或子域肯定会取消函数调用,它会增加不必要的混乱并向用户浏览器发送更多内容。

这取决于您认为您的应用需要做什么。

答案 1 :(得分:1)

在我看来,你应该总是使用base_url()来定义你的路径,因为这样你就可以确保你的路径永远是正确的路径。如果你认为echo函数太脏了,你总是可以使用模板引擎,如template parser class中内置的Code igniter或Smarty之类的外部代码。

答案 2 :(得分:1)

我想我会添加一些与我相关的东西。

  • 正如您所提到的,如果您需要在子目录中安装Codeigniter,/前导斜杠当然不会起作用。您必须在路径中包含子目录名称。就个人而言,这出现了很多,因为我们将在子目录中安装重新设计或原型。但是,如果您尚未让CI自动检测您的基本网址(从v2.0.2开始),这可能很好(如果适用)切换到SSL。

  • $config['base_url']更改为不包含完整域名可能不是一个好主意。在我的脑海中,这会破坏您的应用程序使用base_url()功能发送的电子邮件中的链接和引用,并且通常可能会导致意外结果。

  • 您需要使用基本网址的所有HTML标记,例如<link> <img><a>,都由Codeigniter功能涵盖。 (link_tag()anchor()img())。这些将为您处理基本URL。 (为什么他们遗漏<script>超出了我......)

但是,我同意 - 使用完整的基本网址会增加很多不必要的网页权重,尤其是在导航中。这是我抓取路径的方法(如果是子目录安装):

// constants.php
$base_uri = $_SERVER['SCRIPT_NAME']; // Always index.php (bootstrap), right?
$base_uri = str_replace('index.php', '', $base_uri);
define('BASE_URI', $base_uri);

您可以将其更改为函数或配置项或其他任何内容,我更喜欢常量。然后你可以使用:

<script src="<?php echo BASE_URI; ?>js/functions.js"></script>

这通常是一种冗长的方式来说/,但处理子目录问题。

这似乎是浪费时间,但是当你使用相同的代码库进行大量安装时,配置就更少了。

答案 3 :(得分:0)

作为可读性和灵活性之间的折衷,我会做以下事情:

<link rel="stylesheet" href="<?= site_url('css/main.css') ?>" />
<script src="<?= site_url('js/jquery.js); ?>"></script>
<script src="<?= site_url('js/functions.js); ?>"></script>
...
<img src="<?= site_url('images/dolphin.png'); ?>" />