2011-05-19 78 views
1

我正在將一個複雜的舊網站遷移到一個使用codeigniter編碼的新網站,並且由於codeigniter路由配置的工作方式,導致重複內容的許多重寫url問題。codeigniter,如何避免重複的內容,因爲路由配置不正確?

我有舊網址是這樣的:

  • /detail.php?id=ABCDE & LANG = EN &頁= 2
  • /細節/ ABCDE/EN/2

新網站改爲擁有seo友好的網址,例如:

  • /en/products/hard-disks-2.html

以我的路由配置我:

  • $路線[ '(:任何)/(:任何)/(:任何)'] = '控制器/ $ 1/$ 2/$ 3' ;
  • $ url_suffix才能是 '的.html'

這是導致重複的內容,因爲:

  • /EN /產品/硬盤-2
  • /EN /產品/硬盤-2.HTML
  • /en/products/hard-disks-2.html?p=2
  • /EN /產品/硬盤-2?p = 2時
  • /en/products/hard-disks-2.html/
  • /en/products/hard-disks-2.html/.html

上述所有的有效期爲笨路線和這導致網站內的重複內容。

有沒有辦法避免這種情況? 也許使用正則表達式?

我不能用.htaccess解決這個問題,因爲網站有太多的可能結合的網址,我也有一些控制器,我仍然需要使用「獲取」參數。

+0

如果你從來沒有鏈接重複的網址,谷歌將永遠不會找到它... – Aren 2011-05-19 22:02:23

+0

@Aren倒黴了一些其他人的錯誤或者代碼本身會發生,那就發生了;也有很多這是因爲舊的網站是完全舊式/index.php?a=3&b=4所以.htaccess無法承受所有的參數與301遷移舊網址 – Antonio 2011-05-20 12:15:24

回答

0

我終於弄清楚如何沒有重複的URL解析。

首先在config.php中刪除後綴,最好不要用它: $ config ['url_suffix'] ='';

然後在routes.php中永遠不要使用通配符,並且總是使用正則表達式。

I.e,如果我使用: $ route ['(:any)/(:num)'] ='homepage/parser/$ 1/$ 2'; 這會爲以下所有網址的工作:

/a/10 
/a/10/11 
/a/10/11/12 

等等!

相反:

$route['([\w_-]+)/(\d+)'] = 'homepage/parser/$1/$2'; 

這僅適用於

/a/10 

和工作:

如果你真的網址在結束
$route['([\w_-]+).html'] = 'homepage/parser/$1'; 

只會工作的.html

倒黴/ a/10.html /仍然是一個複製品所以,我需要至少一個.htaccess規則來刪除網址後面的斜槓

我真的需要獨特的網址,所以我認爲我放棄了這個項目的任何未來codeigniter發展,我混合了網址:1)的.html 2)目錄3)舊的動態網址

相反,我弄清楚,對於SEO purpouse可能是最好的: - 只使用沒有擴展名的網頁 - 避免任何目錄

所以,如果是這種情況(我的另一個項目),我只是在我的代碼中使用普通URL,在routes.php中使用正則表達式。

唯一的問題是結尾的斜線重複的問題,但是這可以在全球範圍與該其他解決這個的.htaccess來避免: Remove trailing slash using .htaccess except for home/landing page