假设我有这样的代码,
<a href="register">Join</a>
链接应该在主页上,主页的url应该是
localhost/项目/主要
main是控制器,有一个索引函数,用于加载主页的视图。我设置了页眉导航和页脚作为模板,所以在我的索引函数中,我有。
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('homepage');
$this->load->view('templates/footer');
当我点击位于导航模板中的连接链接时,url将是,
localhost/项目/主/登记
在主控制器上的寄存器函数,我放了一个简单的echo函数,看看它是否工作,它正在工作。
问题是我很困惑,我搜索了如何正确地从视图链接到CI中的另一个视图,我看到使用的base_url()或site_url()函数,我使用base_url,因为我用。htaccess在我的链接上取出了index.php
令人困惑的是,如果我使用base_url()函数,比如
<a href="<?php echo base_url(); ?>main/register">Join</a>
,当然base_url在我的配置是localhost/Project/,所以我希望链接也去主/控制器,就像,
localhost/Project/main/register但是我得到的是
http://localhost/Project/localhost/Project/main/register
我困惑的是,我认为或仍然在想,如果我曾经点击链接的url会刷新或什么的。还是我错了?
我知道我的困惑在别人看来可能很简单,但我太糊涂了,我不知道我应该去哪里澄清这一点。虽然我可以只用第一个,但我只是想理解为什么…No index.php
你可能已经这样做了,但只是为了完成…
如果你想让你的地址没有index.php
,你需要做两件事:
首先,将index.php
从config.php
中移除。
在第32行,更改:
$config['index_page'] = 'index.php';
:
$config['index_page'] = '';
第二,将重写添加到您的.htaccess
。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
base_url()
或site_url()
CodeIgniter试图猜测您网站的base_url
,如果它是错误的,您可以在config.php
文件的第20行更改它,就在index_page
之上。建议您手动设置。
base_url()
,顾名思义,打印在config.php
文件中设置的或由CodeIgniter猜测的基本URL。例如,使用它来提供css
或js
文件的绝对路径,例如:
<link rel="stylesheet" type="text/css" href="<?=base_url()?>assets/style.css">
site_url()
为controller/method
生成整个URL。像这样使用:
<a href="<?=site_url('main/register')?>">Register</a>
如果您的base_url
是例如http://localhost/Project/
,这将生成http://localhost/Project/main/register
。