2

我正在尝试学习 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

但如果我在

/index.php/news/

正如我所说,这是正确的教程,所以我不确定发生了什么。

我可以使 HREFs 绝对....

<p><a href="<?php echo config_item('base_url').config_item('index_page').'/news/'.$news_item['slug']; ?>">View article</a></p>

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

有什么想法吗?

4

5 回答 5

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");
于 2012-10-21T14:51:06.447 回答
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>

它关闭了工作

于 2012-10-21T14:14:26.890 回答
2

如果您有以下格式的网址,则相对网址将无法按照您的预期工作:

原因是相对 url 使用完整的 URI 路径作为参考(因此是“相对”)。因此,如果您在(注意没有结束斜杠)stuff/things的 URI 路径上引用(注意前面的斜杠),您会得到,因为它假定您想要文件夹中的某些内容。/stuff/things/stuff/stuff/thingsstuff

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

site_url('stuff/things')会变成http://domain.com/stuff/things

对于这种情况,echo site_url('news/'.$news_item['slug']);请在锚点的 href 中使用。您也可以echo anchor('news/'.$news_item['slug'], 'Link text to this article');在不编写 html 的情况下回显文章的链接。

一个警告——site_url()将包含index.php在 URI 中(如果它没有从你的配置文件中删除),所以如果你想引用图像、javascript、css 等,那么使用base_url()它只会引用你的base_path配置变量。

编辑:忘了提及,您需要使用URL Helper才能使这些功能正常工作。

于 2012-10-21T14:53:18.743 回答
1

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

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

代替

$config['base_url'] = 'http://localhost/myrootfolder/';
于 2016-04-26T10:55:22.990 回答
0

打开你的 config.php 然后删除 index.php 。

然后在那之后使用

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

然后配置您的路线

$route['news/(:any)'] = 'news/index/$1';
于 2012-10-21T14:29:40.973 回答