我正在尝试学习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>
......但我不应该这样做。
有什么想法吗?
答案 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';