2014-12-28 136 views
0

我想讓我的網站上的URL更好一些。基於GET參數的URL重定向

目前,產品單一頁面在形式:

www.mywebsite.com/details.php?id=1

,我想那些更像

www.mywebsite.com/name-of-the-product?id=1

其中id = 1是多變的,它會是特定產品的ID。

所以我想將所有新鏈接重定向到名爲details.php的舊頁面,並將id傳遞給它。

我搜索了一些答案,但所有這些都是預定義和具體的GET參數,我希望這是更一般的,所有網站上的產品。

更新

謝謝大家的幫助!看起來我誤導了你。我在網站上有很多頁面。我只想爲這個路線改變路線(單個產品頁面,以便那些特定的路線看起來更好)。 現在,只有@samurai的答案重定向,但它也重定向的每隔一頁。這就是爲什麼我想要添加一些特定的GET參數(或類似的東西),告訴.htaccess'嘿,只有像這樣重定向到details.php'。 可以這樣做嗎?

+0

如果你已經「名的最品」你爲什麼需要PRODUCT_ID在你的網址? 也許你需要這樣的URL:www.mywebsite.com/product/1其中1是你的產品ID? –

+0

可能是我錯過了一些東西。我認爲通過id獲取它會比通過將url slug轉換回產品名稱更容易。所以它會像:nike-air-max,在我的分貝它是耐克空氣馬克斯等 – Ned

+0

和我認爲這將更容易獲取URL(在.htaccess中),如果它有一些特定的東西(如id =?)在這種情況下。 – Ned

回答

1

內部重寫應該是這樣的:

RewriteRule ^(?!details\.php)[^/]+/?$ details.php [L] 

查詢字符串自動結轉。 (?details\.php)部分是負面預測。它會阻止details.php匹配這條規則,因爲這會導致無限循環。請注意,您應該:

  • 如果提供了ID,請檢查details.php。如果不提供,你應該做你的數據庫的魔法來獲得這個ID,然後重定向客戶端在PHP

    if(empty($_GET['id'])) { 
        $id = getIdByName($name); 
        header("Location: {$name}?id={$id}", 301); 
        exit(); 
    } 
    
  • 檢查details.php沒有直接請求。你不能召喚從在.htaccess稀薄的空氣中的產品名稱,所以你需要做到這一點在你的PHP腳本

    if(empty($name) || $name == "details.php") { 
        $name = getNameById($id); 
        header("Location: {$name}?id={$id}", 301); 
        exit(); 
    } 
    
+0

嘿@ Sumurai8,我試過了,但它重定向所有頁面,以獲取細節。 PHP。請檢查我更新的問題。 – Ned

+0

這種方式通常被反駁,是通過添加一個通用前綴(排序 - 什麼lolbas建議)。如果所有產品的格式都是'product/product-name?id = 123',那麼可以將它與'RewriteRule^product/[^ /] + /?$ details.php [L]'匹配。或者排除所有不想在負面預測中匹配的頁面,但這會非常快速地變得雜亂無章! – Sumurai8

+0

是的,這將工作!謝謝! – Ned

1

爲什麼要保持身份證在網址時,它會顯示產品名稱? 無論如何,你可以做的是從數據庫中獲取產品名稱,基於提供的id,首頁到所需的url並添加一些.htaccess魔術

UPD:讓我們以Nike Air Max爲例。用戶嘗試訪問下一個網址:www.mywebsite.com/?id=1,而您的數據庫Air Maxes與id = 1相關聯。烏爾的頁面的PHP代碼塊:

$id = intval($_GET['id'], 10); 
$product_name = mysqli_fetch_assoc(mysqli_query($con, "SELECT item_name FROM products WHERE id = $id")); 
$altered_name = str_replace(' ', '-', $product_name); 
header('Location: /?id=1&product_name='.$altered_name); 

現在一些神奇的.htaccess

RewriteRule ^product/([^/]*)$ /?id=1&product_name=$1 [L] 

結果,URL將被www.website.com/product/nike-air-maxes

+0

是的,以及.htaccess魔術是我感興趣的部分:) – Ned

+0

@Ned look更新了答案 – lolbas

+0

感謝您的評論和幫助。我會提高你的答案,我希望我可以給你兩個答案的積分。 – Ned

0

創建一個.htaccess文件,並把這些線它:

RewriteEngine on 
# URL rewriting rules 
RewriteRule ^([_a-zA-Z0-9-]+)/([0-9]+)$ details.php?id=$2 [L,E] 

和您的網址應該是:www.mywebsite.com/name-of-the-product/1

RewriteRule ^([_a-zA-Z0-9-]+)?$ details.php [L,E] 

有這樣的網址:www.mywebsite.com/name-of-the-product?id=1

+0

謝謝,我試過了,但是不能讓它起作用,就像它完全忽略了規則。請看我更新的問題。 – Ned