2012-03-31 59 views
2

我已經完成了CI文檔中包含的着名的'新聞'toutorial。有時會在我的鏈接字符串中出現雙「新聞/」段,如'/ codeig/news/news/entry',有時在重新加載頁面之後,一切正常。我應該提到,我已經擺脫了'index.php'部分繼另一個受歡迎的教程。我的代碼有什麼問題?Codeigniter的網址翻倍,比如:news/news/

這是我的路由:

$route['news/create'] = 'news/create'; 
$route['news/update/(:any)'] = 'news/update/$1'; 
$route['news/delete/(:any)'] = 'news/delete/$1'; 
$route['news/(:any)'] = 'news/view/$1'; 
$route['news'] = 'news'; 
$route['welcome'] = 'welcome'; 

$route['auth/(:any)'] = 'auth/$1'; 
$route['auth'] = 'auth'; 
$route['activate/:num/:any'] = "/auth/activate/$1/$2"; 
$route['reset_password/:num/:any'] = "/auth/reset_password/$1/$2"; 

$route['(:any)'] = 'pages/view/$1'; 
$route['default_controller'] = 'news'; 

視圖/消息/ index.php文件:

<?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 ?> 

視圖的方法(新聞控制器)

public function view($slug) 
{ 
$data['news_item'] = $this->news_model->get_news($slug); 

if (empty($data['news_item'])) 
{ 
    show_404(); 
} 

$data['title'] = $data['news_item']['title']; 

$this->load->view('templates/header', $data); 
$this->load->view('news/view', $data); 
$this->load->view('templates/footer'); 
} 
+0

我們不能告訴你的代碼有什麼問題,因爲你沒有向我們展示任何... – Mudshark 2012-03-31 14:52:19

+0

好吧,那是從原始CI文檔中獲取的代碼。 – kurdt 2012-03-31 15:03:01

+0

你是如何構造輸出加倍段的URL,即'news/news /'?你可以發佈該代碼嗎? – 2012-03-31 15:44:26

回答

8

在HTML中,如果目前的URL是這樣的:

http://example.com/news/

而且你有一個像這樣的鏈接:

<a href="news/article-slug">Link</a> 

點擊該鏈接後,你的網址,都會變成:

http://example.com/news/news/article-slug

如果你再次點擊它,你必須:

http://example.com/news/news/article-slug/news/article-slug

注意:這不完全正確,路徑的相關性並不取決於是否有一個尾隨在當前URL斜線/和/或您的鏈接。

href="news/something"是一個相對於相對於當前頁面的URL。你想用絕對的或紮根網址:

<a href="http://example.com/mysite/news/article-slug">Link</a> 
<a href="/news/article-slug">Link</a> 

使用下列任一笨功能,使絕對URL簡單:

  • anchor()(使得整個鏈接你)
  • site_url()(返回你的絕對基礎URL)
  • base_url()(同上)
<?php echo anchor('news/'.$news_item['slug'], 'Link Text'); ?> 
<a href="<?php echo base_url('news/'.$news_item['slug']); ?>">Link Text</a> 

只是爲了澄清,這與您的路由無關 - 這完全是您的HTML中的相對鏈接問題。

+0

它現在可以運作:)幫了我很多!謝謝 – kurdt 2012-03-31 17:31:22

+0

偉大的答案btw @Madmartigan你現在有一個新的追隨者在Twitter土地:) – Philip 2012-04-01 23:51:19

2

一個不太詳細的解釋:

在文件 '應用/視圖/消息/ index.php文件'

(引起/新聞/新聞/ URL中)之前:

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

(固定):

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

news/包含在$news_item['slug']中,所以不需要在HTML中。