Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 代码点火器-当URL以斜杠结尾时,相对URL停止工作?_Php_Codeigniter_Url_Href - Fatal编程技术网

Php 代码点火器-当URL以斜杠结尾时,相对URL停止工作?

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'] ?> &

我正在努力学习CI,刚刚完成了课程。我发现,如果我的URL以尾随斜杠结尾,则某些链接HREF不起作用-例如,以下链接:

<?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将无法按预期的方式工作:

原因是相对URL使用完整URI路径作为引用(因此为“相对”)。因此,如果您在
/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
vs
http://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/';