44

正如我在一些资源中阅读的那样,其中base_url()site_url()功能codeigniter几乎相同,尽管我的 codeigniter 版本(2.1.3)在它的 config.php 文件(在 config 目录中)中没有 site_url() 。

然而,自从我看到带有参数的 site_url() 并且从未见过 base_url() 没有参数之后,它们之间是否存在任何差异?

4

7 回答 7

72
echo base_url(); // http://example.com/website
echo site_url(); // http://example.com/website/index.php

如果您希望通过 URL 访问资源(例如 css、js、图像),则使用base_url(),否则site_url()会更好。

详细参考 在 CodeIgniter 中检查这两个函数。

public function site_url($uri = '')
    {
        if (empty($uri))
        {
            return $this->slash_item('base_url').$this->item('index_page');
        }
        $uri = $this->_uri_string($uri);
        if ($this->item('enable_query_strings') === FALSE)
        {
            $suffix = isset($this->config['url_suffix']) ? $this->config['url_suffix'] : '';
            if ($suffix !== '')
            {
                if (($offset = strpos($uri, '?')) !== FALSE)
                {
                    $uri = substr($uri, 0, $offset).$suffix.substr($uri, $offset);
                }
                else
                {
                    $uri .= $suffix;
                }
            }
            return $this->slash_item('base_url').$this->slash_item('index_page').$uri;
        }
        elseif (strpos($uri, '?') === FALSE)
        {
            $uri = '?'.$uri;
        }
        return $this->slash_item('base_url').$this->item('index_page').$uri;
    }

基本 URL 函数。

public function base_url($uri = '')
        {
            return $this->slash_item('base_url').ltrim($this->_uri_string($uri), '/');
        }
于 2013-06-13T05:22:51.787 回答
22

site_url: 返回 base_url + index_page + uri_string

base_url: 返回 base_url + uri_string

在以下位置查看这两个函数的源代码:https ://github.com/EllisLab/CodeIgniter/blob/606fee0e2e0aa6a906db82e77090e91f133d7378/system/core/Config.php

于 2013-06-13T05:26:19.173 回答
14

1.site_url

的目的site_url是在您的 URL 发生更改时使您的页面变得更加可移植。site_urlindex.php文件一起出现。

可以选择将段作为字符串或数组传递给函数。

echo site_url("news/local/123");

它会给:http ://ci.com/index.php/news/local/123

您甚至可以将段作为数组传递:

$segments = array('news', 'local', '123');
echo site_url($segments);

2.base_url

base_url是没有index_page或被url_suffix附加。例如site_url,您可以将段提供为字符串或数组。

如果您希望通过 URL 访问资源base_url,则可以向文件提供字符串,例如图像或样式表,否则site_url就足够了。

echo base_url("/images/icons/image.png");
于 2013-06-13T06:06:19.610 回答
2

或者,您可以.htaccess在其文件旁边的 CodeIgniter 根文件夹中创建index.php文件。

只需将此代码添加到.htaccess文件中:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

此代码将使该词index.php保持看不见。

http://localhost/CodeIgniter/index.php/controllersName/

会改成这个

http://localhost/CodeIgniter/controllersName/
于 2018-11-20T03:51:38.000 回答
1

base_url()即使没有扩展名,Codeigniter也可以使用常用的。.php

site_url()自定义模板中常用的,Wordpress即使只是调用post_title博客的或带有扩展名的文件名也可以使用。

于 2016-12-06T03:20:57.247 回答
1

site_url() 是执行 index.php,为什么 site_url 比 base_url 更好。

于 2017-05-27T12:22:49.443 回答
0

我想添加何时使用 base_url() 和 site_url() 。基本上可以在为控制器创建链接时使用 site_url() 而 base_url() 可以在我们需要为资产创建 url 的地方使用,例如加载 css 或 js 文件或某些图像。

我一直更喜欢使用 site_url() 来创建指向控制器或 ajax url 的链接,使用 base_url() 来加载资产。

于 2017-09-22T12:07:54.650 回答