codeigniter site_url()和base_url()之间有什么区别?

blmhpbnm  于 2022-12-07  发布在  其他
关注(0)|答案(7)|浏览(183)

正如我在一些参考资料中所读到的,base_url()Codeigniter中的site_url()函数几乎是相同的,尽管我的Codeigniter(2.1.3)版本在其config.php文件(在config目录中)中没有site_url()。
然而,既然我见过site_url()带有参数,但从未见过base_url()不带参数,那么它们之间有什么不同吗?

jw5wzhpr

jw5wzhpr1#

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

如果您希望通过URL访问某个资源(如css、js、image),请使用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), '/');
        }
k3fezbri

k3fezbri2#

site_url:返回基本URL +索引页+ URI字符串
base_url:返回基本URL + URI字符串
请参阅两个函数的源代码:https://github.com/EllisLab/CodeIgniter/blob/606fee0e2e0aa6a906db82e77090e91f133d7378/system/core/Config.php

r1wp621o

r1wp621o3#

1.网站网址

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是未附加index_pageurl_suffix的值。与site_url类似,您可以将区段提供为字串或数组。
如果你想通过URL访问一个资源,使用base_url,你可以给一个文件提供一个字符串,比如一个图像或样式表,否则site_url就足够了。

echo base_url("/images/icons/image.png");
cbwuti44

cbwuti444#

或者,您也可以在CodeIgniter根数据夹中的index.php档案旁边建立.htaccess档案。
只需在.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/
z4bn682m

z4bn682m5#

即使没有.php扩展,也可以使用Codeigniter中常用的base_url()
Wordpress自定义模板中常用的site_url(),即使您只调用博客的post_title或扩展名为的文件名,也可以使用。

irlmq6kh

irlmq6kh6#

site_url()是执行index.php,这就是为什么site_url比base_url更好的原因。

jhkqcmku

jhkqcmku7#

我想补充一下什么时候使用base_url()和site_url()。基本上,在为控制器创建链接时可以使用site_url(),而在我们需要为资产创建url时,如加载css或js文件或一些图像时,可以使用base_url()。
我总是更喜欢使用site_url()来创建到控制器或 AJAX url的链接,使用base_url()来加载资源。

相关问题