2012-07-14 87 views
-1

我的鏈接,如「http://www.shinylook.ro/product.php?id=58」我使用此代碼重寫他們像重定向舊的動態鏈接,搜索引擎友好鏈接

"http://www.shinylook.ro/produs/58/saboti-dama/" 

RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/ product.php?id=$1 [L] 

但我不能管理重定向舊鏈接到新的。如果有人會鍵入舊的,將被重定向到新的。

我想這一個:

RewriteRule ^product.php?id=$1 produs/([0-9]+)/([a-zA-Z0-9_-]+)\/ [L,R=301] 

但它不工作。

我該如何解決這個問題?

編輯:

我設法寫PHP代碼...您可以在www.shinylook.ro/redirect_old_links.php?id=44嘗試。

但我不能老是設法解決htaccess的重寫代碼,重定向到文件...

我用RewriteRule ^product.php?id=([0-9]+) redirect_old_links.php?id=$1 [R=301,NC]

但它不工作。

編輯2:

我設法解決這個問題... htaccess的樣子

RewriteCond %{ENV:REDIRECT_STATUS} !=200 

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ 

RewriteRule ^product.php$ /redirect_old_links.php/ [L] 
RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/$ product.php?id=$1 [L] 

而且PHP代碼如下所示:

<? 
    include "_storescripts/connect_to_mysql.php"; 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 

    if (isset($_GET['id'])) { 
     $produs = $_GET['id']; 

     $sql = mysql_query("SELECT nume_produs FROM products WHERE id='$produs'"); // Chose the product 

     // ------- We check if it exists --------- 
     $existCount = mysql_num_rows($sql); // Count 

     if ($existCount == 1) { 
      while($row = mysql_fetch_array($sql)){ 
       $nume_brut = $row["nume_produs"]; 
       $nume = explode(" ", $nume_brut); 
      } 
      $nume_final = strtolower($nume[0]."-".$nume[1]); 
      $name = urlencode($nume_final); 
      header("location: http://www.shinylook.ro/produs/$produs/$name/", TRUE, 301); 
     } 
     else { 
      echo ("This product id does not exist!"); 
      exit(); 
     } 
    } 
?> 

如果有人看到了一些錯誤(我是新來這個領域),我會很高興聽到他們的聲音,並學習如何做這個事情做得更好......

+0

只是確保轉義您在SQL查詢中使用的輸入變量。在這種情況下,因爲你想要一個整數,只需要生成'$ produs = intval($ _ GET [「id」]);'。 – Prody 2012-07-14 11:24:24

+0

我剛剛修改爲$ produs = intval($ _ GET [「id」]);但你能告訴我更多關於逃生變量..我是新來的PHP和我不知道很多... – user1483138 2012-07-14 12:06:51

+0

基本上,任何時候你使用用戶輸入將它添加到SQL查詢,你必須妥善消毒它。作爲一個非常簡單的解決方案,你可以在PHP中使用'mysql_real_escape_string'。您希望這樣做,以便惡意用戶無法在查詢中注入額外的SQL代碼。 – Prody 2012-07-14 12:49:32

回答

2

您可能希望將舊鏈接重定向到新網址,以便人們在將博客粘貼到博客等時使用新鏈接。

當使用RewriteRule s時,Apache無法猜測其餘的名稱以執行重定向的其他部分。

它可以將其刪除:
produs/58/saboti-dama/ -> product.php?id=58
但如果將它以做反向再次得到名字?

對於這一點,你應該寫一個redirect_old_links.php文件,這將只是重定向到新的位置:
http://php.net/manual/en/function.header.php

例子:

用戶訪問
product.php?id=58

RewriteRule product.php?id=([0-9]+) redirect_old_links.php?id=$1 [L]

redirect_old_links.php

mysql_select("SELECT name FROM PRODUCTS WHERE ID = ".$_GET["id"]); 
// the above line is just so you get the point, 
// please create a proper query with PDO and proper escaping 

$id = urlencode($product_id); 
$name = urlencode($product_name); 

header("Location: produs/$id/$name/"); 

對不起,我在很長一段時間內沒有使用過PHP,你必須自己檢查函數的文檔,我不記得mysql_select/fetch過程。 Urlencode也可能是錯誤的。

但我希望你明白這一點。

+0

謝謝,我正在嘗試:) – user1483138 2012-07-14 07:54:41

+0

我設法寫的php代碼...你可以在這裏試試 http://www.shinylook.ro /redirect_old_links.php?id=44 但我不能解決htaccess重寫代碼重定向到該文件.. – user1483138 2012-07-14 08:54:07

+0

@ user1483138我看到你剛剛編輯你的問題,你說它的工作,是嗎?還是你還需要幫助? – Prody 2012-07-14 11:23:26

相關問題