2012-08-26 95 views
0

我想用htaccess重定向很多頁面(150個鏈接),但是我想問一下是否可以有重寫規則。用htaccess重定向很多頁面

我的舊鏈接是;

http://www.sitename.com/aaa/category/article.html

http://www.sitename.com/aaa/category/differentarticle.html

http://www.sitename.com/aaa/anothercategory/anotherarticle.html

http://www.sitename.com/aaa/anothercategory/anotherarticletoo.html

新鏈接

http://www.sitename.com/aaa/111-category/999-article.html

http://www.sitename.com/aaa/111-category/990-differentarticle.html

http://www.sitename.com/aaa/222-anothercategory/888-article.html

http://www.sitename.com/aaa/222-anothercategory/886-anotherarticletoo.html

的問題是,有很多的文章,他們都有不同的文章編號。

我該如何爲每個類別編寫301重定向規則?

謝謝..

+0

而且您希望將舊鏈接設爲新的,以便擁有書籤的用戶仍然可以找到該頁面?或其他方式,使它看起來不同,但服務器仍然處理它一樣? –

+0

所有這些ID從哪裏來?如果他們來自數據庫,你打算如何讓htaccess文件與數據庫交談? –

+0

這是一個joomla 1.5網站,我想改變菜單項(單篇文章)到分類文章鏈接的鏈接。但是這些鏈接(舊)在域中使用。域擁有超過10000個網頁。好吧,我認爲我不能這樣做,如果我添加200重定向規則到htaccess它會減慢網站? –

回答

1

我會假設你想重寫http://www.sitename.com/aaa/category/article.htmlhttp://www.sitename.com/aaa/111-category/999-article.html,而你正在使用PHP和用於存儲物品某種形式的數據庫中(至少名稱和ID)

ModRewirte不能添加額外的數據(除非它是硬編碼的值,這將對每個url應用相同的值)。

但可以讓它做的一切內部重寫(而不是重定向)到index.php,然後index.php文件可以讀取$ _ SERVER [「REQUEST_URI」]看到的是什麼要求URL。這會讓你得到/aaa/category/article.html,然後你可以用PHP做任何你想做的事情,包括髮送重定向。

以下是摘錄自我執行同樣技巧但具有不同目的的地方。第一位忽略諸如css和images文件夾之類的位置。任何不符合這些位置將被髮送到index.php

Options +FollowSymLinks 
IndexIgnore */* 
RewriteEngine On 

RewriteCond %{REQUEST_URI} !/css/.*$ 
RewriteCond %{REQUEST_URI} !/images/.*$ 
RewriteCond %{REQUEST_URI} !/js/.*$ 
RewriteCond %{REQUEST_URI} !/favicon\.ico$ 
RewriteCond %{REQUEST_URI} !/robots\.txt$ 
RewriteRule . index.php 

和你的index.php(或任何你想調用它:我的是router.php)

<?php 
function http_redirect($url, $code=301) { 
    header('HTTP/1.1 '.$code.' Found'); 
    header('Location: '.$url); 
    echo 'Redirecting to <a>'.$url.'</a>.'; 
    die(''); 
} 


$loc = explode('?', $_SERVER['REQUEST_URI']); //Get rid of any query string 
$query = loc[1]; 
$loc = explode('/', $loc[0]); 
//you now have 
//array('aaa','category','article.html') 
//look these up in the database to build your new URL 
http_redirect('my/new/url'.$loc[0]); //whatever, don't forget the query string if it has 1 
?> 

你應該還添加了更多的錯誤檢查功能,我將它保留了很短的時間