我這個老網站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,我相信會創建一個循環。
希望這是有道理的。你不知道這對我來說是多麼重要,所以我最好希望那些能夠幫助的人:)
真令人費解。 ¿什麼是和如何得到'prodid1'中提到的「...我們可以得到prodid2,如果我們有prodid1 ...」?總是有3個鍵(product-title-prodid2)? ¿他們總是用'-'分開嗎?在查詢中,例如,'cat'是**鍵**,'CAR%20AUDIO'是**值**。在你的例子中使用這些屬性會更清楚,比如key1 = value1等。 –
感謝您的快速反應,我們驚訝於人們如何快速準備協助。希望我能儘快分享我的專業知識。 – user1924270