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

时间:2012-10-21 14:04:34

标签: php codeigniter url href

我正在尝试学习CI并且刚刚完成了starter tutorial。我发现如果我的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

但如果我在

则不行
/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>

......但我不应该这样做。

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

像这样:

<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>

只是在开头添加斜杠

<强>更新:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

将此添加到应用程序根目录中的.htaccess文件和codeigniter的配置文件中:

$config['index_page'] = ''; //make it like this 

现在您不必使用/ index / news,只需使用您网站根目录中的/ news

所以你可以像这样使用它:

<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>

关闭工作

答案 1 :(得分:2)

此处可能没有足够的信息来诊断问题。 “不起作用” - 错误是什么? 完整的URL是什么样的?

它可能与您的Apache和服务器配置有关。尝试编辑配置并尝试使用“PATH_INFO”与“REQUEST_URI”。

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

最后,(这只是略微相关)但在Codeigniter中构建URL的最佳方法是site_url()函数(创建完整的URL):

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

答案 2 :(得分:2)

如果您使用以下格式的网址,相对网址将无法满足您的预期效果:

原因是因为相对URL使用完整的URI路径作为引用(因此是“相对”)。因此,如果您在stuff/things的URI路径上引用/stuff/things(在斜杠前面注释)(请注意没有结束斜杠),您将获得/stuff/stuff/things,因为它假设您需要{ {1}}文件夹。

我要做的是使用CodeIgniter的stuff函数,因为它会为您生成绝对网址(包括域名)。

site_url()将成为site_url('stuff/things')

对于这种情况,请在锚点的href中使用http://domain.com/stuff/things。您也可以echo site_url('news/'.$news_item['slug']);来回显文章的链接,而无需编写html。

一个警告 - echo anchor('news/'.$news_item['slug'], 'Link text to this article');将在URI中包含site_url()(如果尚未从配置文件中删除),那么如果您想引用图片,javascript,css等,那么使用index.php,它只会引用您的base_url()配置变量。

编辑:忘记提及,您需要使用URL Helper才能使用这些功能。

答案 3 :(得分:1)

也许为时已晚,但我已经遇到了这个问题,尽管做了所有的建议,问题仍然存在! 现在它终于工作了,只需要

$config['base_url'] = '/myrootfolder/';

而不是

$config['base_url'] = 'http://localhost/myrootfolder/';

答案 4 :(得分:0)

打开config.php,然后删除index.php。

然后使用

echo base_url('news').'/'.$news_item['slug']

然后配置你的路线

$route['news/(:any)'] = 'news/index/$1';