2012-12-22 29 views
0

我這個老網站URL結構:帶有301s的新NICE網址。如何讓他們一起工作?

site.com/folder/prod.php?cat=MAIN%20CAT%20 & prodid1 = 123 & prodtitle = PROD%20TITLE & SUBCAT = SUB%20CAT

和真實的例子將是這樣的:

site.com/folder/prod.php?cat=CAR%20AUDIO & prodid1 = 4444 & prodtitle = MTX%20AMPS & SUBCAT = AMPS

在這裏你可以看到,產品頁面有4個變量:類別,產品編號,產品標題和子類別。其中一些變量用於打開菜單。是的,該網址會將變量與空格一起以大寫和小寫形式提取。

新的站點URL有一個新的結構:

site.com/x/product-title-prodid2

一個相對例子如:

site.com/x/mtx -amps-8888

這是通過使用兩個變量(友好蛞蝓+第二產品ID:prodid2)完成在.htaccess用下面的代碼

<IfModule mod_rewrite.c> 
Options +Indexes 
Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/

RewriteRule ^p/(.*)/$ product.php?prodid2=$1 
RewriteRule ^p/(.*)$ product.php?prodid2=$1 

</IfModule> 

內部我們可以得到prodid2如果我們從同桌prodid1,但不是反之亦然。

一切工作正常,但我們現在必須創建301重定向,顯然,因爲相同的變量沒有在舊/新的網址中使用,那麼它變得棘手,因爲顯然我們必須創建一個單一的規則來創建漂亮的URL和301s?

我們已經嘗試添加下列到htaccess的:

RewriteCond %{QUERY_STRING} ^cat=CAR%20AUDIO&prodid1=4444&prodtitle=MTX%20AMPS&subcat=AMPS$ [NC] 
RewriteRule ite.com/folder/prod.php site.com/x/mtx-amps-8888? [R=301,L] 

和它的作品只有1個產品,但添加2個或更多時,該網站會下降。我想象這將是一個無限循環?

一個辦法是增加一個:

ErrorDocument 404 /404.php 

獲得URL和重定向到頁面,但這對於社會企業是醜陋的。


UPDATE:

對不起,我缺乏對這個主題的理解,是很新的這一點。

該產品有兩個重要的IDS。例如:

MTX AMP(它是實際的產品名稱),如果在3個類別列出將具有重複1個單prodid2和3個不同prodid1(1爲每個類別)。他們都住在同一張桌子上。所以,如果我們有一個prodid1,我們可以在數據庫表中獲得它旁邊的prodid2。

規則獲得在新網站上一個漂亮的URL是使用prodid2

RewriteRule ^p/(.*)$ product.php?prodid2=$1 

這使存儲在數據庫中的完整的價值拉昇。例如MTX-AMPS-8888 < <這是塞+的prodid2的混合

完整的網址是:

site.com/p/mtx-amps-888 

(在p僅僅是一個虛擬forder,我們採取的是可變的優勢展現右頁模板)

所以mtx-amps-888不是3個鍵,它們是在創建產品時生成的,並且一起保存在數據庫的單個字段中。他們已經包括分離 - 所以這不是在htaccess中完成的。 (key)值實際上用於展開舊網站中使用的菜單,但爲了創建301重定向,我們可能會使用prodid1,因爲我們可以匹配該值以獲得prodid2。 prodid2被用作主查詢來獲取新網站中的好網址,它的值將帶來存儲在數據庫中的好網址。

情理之中的事情,從我的研究將是以下幾點:

<IfModule mod_rewrite.c> 
Options +Indexes 
Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/

RewriteRule ^p/(.*)$ product.php?prodid2=$1 

RewriteCond %{QUERY_STRING} ^cat=CAR%20AUDIO&prodid1=4444&prodtitle=MTX%20AMPS&subcat=AMPS$ [NC] 
RewriteRule ite.com/folder/prod.php site.com/x/mtx-amps-8888? [R=301,L] 

RewriteCond %{QUERY_STRING} ^cat=CAR%20AUDIO&prodid1=5555&prodtitle=BOSS%20AMPS&subcat=AMPS$ [NC] 
RewriteRule ite.com/folder/prod.php site.com/x/mtx-amps-8888? [R=301,L] 

RewriteCond %{QUERY_STRING} ^cat=CAR%20VIDEO&prodid1=6666&prodtitle=ALPINE%20DVDS&subcat=DVD%20PLAYERS$ [NC] 
RewriteRule ite.com/folder/prod.php site.com/x/mtx-amps-8888? [R=301,L] 

</IfModule> 

請注意,我刪除從主重寫規則的行:

RewriteRule ^p/(.*)/$ product.php?prodid2=$1 

這僅僅保證了用戶可以也使用/在網址的末尾:site.com/p/mtx-amps-888/

我也重複了3個產品的301重定向的重寫條件,但我確實有3K左右的產品s在這裏列出。如果我保留1,它會工作,但如果我加2,我相信會創建一個循環。

希望這是有道理的。你不知道這對我來說是多麼重要,所以我最好希望那些能夠幫助的人:)

+1

真令人費解。 ¿什麼是和如何得到'prodid1'中提到的「...我們可以得到prodid2,如果我們有prodid1 ...」?總是有3個鍵(product-title-prodid2)? ¿他們總是用'-'分開嗎?在查詢中,例如,'cat'是**鍵**,'CAR%20AUDIO'是**值**。在你的例子中使用這些屬性會更清楚,比如key1 = value1等。 –

+0

感謝您的快速反應,我們驚訝於人們如何快速準備協助。希望我能儘快分享我的專業知識。 – user1924270

回答

0

只需重新創建文件/folder/prod.php並讓php做重定向。這是最簡單和最乾淨的解決方案。

<?php 
    $prodid1 = $_GET['prodid1']; 
    //calculate prodid2 based on prodid1, or use mysql to retreive the prodid2 belonging to prodid1 
    $prodid2 = $prodid1;//just for testing 
    $newpath = "/p/$prodid2/"; 

    // redirect using 301 
    header("Location: http://{$_SERVER['HTTP_HOST']}{$newpath}"); 
    header('HTTP/1.1 301 Moved Permanently'); 
?> 
相關問題