Php 代码点火器-当URL以斜杠结尾时,相对URL停止工作?
我正在努力学习CI,刚刚完成了课程。我发现,如果我的URL以尾随斜杠结尾,则某些链接HREF不起作用-例如,以下链接:Php 代码点火器-当URL以斜杠结尾时,相对URL停止工作?,php,codeigniter,url,href,Php,Codeigniter,Url,Href,我正在努力学习CI,刚刚完成了课程。我发现,如果我的URL以尾随斜杠结尾,则某些链接HREF不起作用-例如,以下链接: <?php foreach ($news as $news_item): ?> <h2><?php echo $news_item['title'] ?></h2> <div id="main"> <?php echo $news_item['text'] ?> &
<?php foreach ($news as $news_item): ?>
<h2><?php echo $news_item['title'] ?></h2>
<div id="main">
<?php echo $news_item['text'] ?>
</div>
<p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>
<?php endforeach ?>
但如果我在的话就不会了
/index.php/news/
正如我所说,这是从教程中得到的,所以我不确定是怎么回事
我可以让HREF绝对化
<p><a href="<?php echo config_item('base_url').config_item('index_page').'/news/'.$news_item['slug']; ?>">View article</a></p>
…但我觉得我不该这么做
有什么想法吗?这样做:
<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>
<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>
现在您不必使用/index/news,只需使用站点根目录中的/news即可
那么你可以这样使用它:
<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>
<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>
它关闭工作打开config.php,然后删除index.php 那么在那次使用之后
echo base_url('news').'/'.$news_item['slug']
然后像这样配置您的路线
$route['news/(:any)'] = 'news/index/$1';
此处可能没有足够的信息来诊断问题。“不起作用”——错误是什么? 完整的URL看起来像什么 这可能与Apache和服务器配置有关。尝试编辑配置并尝试“路径信息”与“请求URI” 最后,(这只是略微相关),但在Codeigniter中构建url的最佳方法是site_url()函数(它创建完整url):
如果您有以下格式的URL,则相对URL将无法按预期的方式工作:
/stuff/things
的URI路径上引用/stuff/things
(注意没有结束斜杠),您将得到/stuff/stuff/things
,因为它假定您需要stuff
文件夹中的某个内容
我要做的是使用CodeIgniter的site\u url()
函数,因为它将为您生成绝对url(包括域)
site\u url('stuff/things')
将变成http://domain.com/stuff/things
对于这种情况,请使用echo site_url('news/'.$news_item['slug'])代码>在您的锚href中。你也可以做回声锚('news/'.$news_item['slug'],'linktext to this article')
在不编写html的情况下回显文章的链接
一个警告--site\u url()
将在URI中包含index.php
(如果它尚未从配置文件中删除),因此如果要引用图像、javascript、css等,请使用base\u url()
,它将只引用base\u路径
配置变量
编辑:忘了提一下,您需要使用才能使这些功能正常工作。可能为时已晚,但我遇到了这个问题,尽管我做了所有建议,问题仍然存在! 现在它终于起作用了,只要把
$config['base_url'] = '/myrootfolder/';
而不是
$config['base_url'] = 'http://localhost/myrootfolder/';
为什么?这不是web开发的一般要求,CI自己的教程也没有这样做。CodeIgniter具有
site\u url()
功能,可以解决您的问题(它生成绝对url)。问题不是codeigniter的问题,而是相对URL首先是如何工作的。请看我的答案。只有当站点位于服务器根目录下时,这才是一个选项。谢谢,我会看看这个,但我很好奇为什么这一切都是必要的。CI支持不支持处理这样的事情吗?这是来自他们自己的CI,所以我不知道为什么其中有不起作用的东西。是的,这是他们文档中的不足(编辑:我的意思当然是“来自他们自己的教程”,而不是“CI”),我发现这篇文章特别有帮助,我使用了mod_rewrite,不太高兴看到该站点的url()和anchor()构建仍然具有index.php的URL通过使$config['index_page']=''解决了这个问题;我猜“删除”的意思是将配置项设置为空字符串,而不是完全删除它。我这样做了,并使用了base\u url()
函数,但现在a)新闻项不再出现在新闻索引上;b) 转到站点根目录会抛出一个找不到的页面(不是CI生成的404),谢谢,但我想从我的问题中可以清楚地看出什么“不起作用”。正如我所说,当URL中有一个尾随斜杠时,页面中的相对链接将停止工作。本教程让我们创建一个新闻索引页面,列出DB-/news中的故事。这些故事的链接是/news/slug。如果使用斜杠查看新闻索引页,CI会错误地呈现这些故事链接的HREF。请再说一遍。我想我只是说你说的不够清楚,有点言过其实。我认为你应该考虑的问题是:a)这是404错误b)显示错误页面c)其他错误。然后是关于URL栏的内容。。。完整的URL,例如http://localhost/index.php/news
vshttp://localhost/index.php/news/
。所有这些都会影响你的具体情况。谢谢。我仍然很困惑,我是如何在他们自己的教程中遇到这个问题的——我一点也没有改变。你可能会认为本教程是开箱即用的。Re:删除索引文件,我不确定你在这里的意思。另一位回答者提到了这一点;我是否只是在配置中为index\u页面
设置一个空值?这样做似乎会破坏整个网站。我是否必须加载一些库才能使site\u url()
正常工作?函数似乎没有定义(通过函数存在()
)编辑确认-似乎应该是$this->config->site\u url()
您需要加载url帮助程序$this->load->helper('url')
或将其添加到helpers数组下的application/config文件夹中的autoload.php。只有在apache或nginx(或任何Web服务器)中进行url重写时,才能从index\u页面
中删除index.php。
echo site_url("news/local/123");
$config['base_url'] = '/myrootfolder/';
$config['base_url'] = 'http://localhost/myrootfolder/';