本帖最後由 咚咚來了 於 2014-1-24 19:13 編輯
; i7 E; U! F8 Oamnoob 發表於 2014-1-24 15:14
* J8 _/ ^. t2 V" t4 \+ o非常感謝!! a" z% g: b" K5 ]; S
% ]$ p2 o2 f7 _( C' `! {& v2 Z2 i- p/ Q我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人 ... " c- [3 b' X9 ?- Q* K
1. 第一個問題. R6 a. y1 c. J4 T/ G$ u W. {
你舉例說的別人的網站,有可能後面那個就是id, 這也是很常見的一種做法,特別是中文cms,因為中文的cms多數都不支持slug。
' e" m7 j9 e+ f把 yousite.com/tao-of-badass-1392.html rewrite到 product-details.php?id=1392 可以做到,也就是把
& j5 m: n! Z! |9 M形如yousite.com/product_name-product_id.html rewrite到 product-details.php?id=product_id 。+ D: ~, ^6 P6 a) E' w% m
只需一條:- Options +FollowSymLinks
, W1 }6 C2 @3 S& c( V' n( ^, ~ - RewriteEngine On6 s: j S$ J* p3 y
- RewriteRule ^(.*)-([0-9]+)\.html$ product-details.php?id=$2 [QSA]
複製代碼 但是這有個前提,就是你能把你網站的URL格式設置成 yousite.com/XXXXX-xxx.html 的形式(大寫XXXX代表類似的「tao-of-badass」的東西,小寫xxx代表類似1392的id), 不然用戶根本得不到這種形式的url,更不用說通過瀏覽器訪問了。5 O: V9 y7 l- y# z. q! g: Y
" `, C( B/ X" r+ f, P% M7 s+ [! @/ T
) w* I& l9 V5 c3 i, N/ J2 l
2. 第二個問題- URL形式 A:
, f9 U; r4 M0 Z/ X# F/ @ - http://www.mydomain.com/product-details.php?id=1392
複製代碼- URL形式 B:# ^, t7 i* V9 V5 R- Z
- http://www.mydomain.com/1392/tao-of-badass.html
複製代碼 首先確定你的這個1392到底什麼,以下假設是product id,否則如果是其他的,例如分類id,那就很不一樣了。
7 ~0 F' T" b! k* @% M
! } n! a& \& w2 Z; U4 o. N8 m如果想從B rewrite到A很容易,因為形式A就需要一個id,B的1392可以傳過去。 但是要反過來,想把A rewrite到B,也就是你說的:
' e- f1 ` Q; ~: p, X" Q( l& P現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」
; W `, n- q* ?( j可能就不行了(我覺得不行,其他兄弟有沒有會的?)。因為對於不同的id,B後面的xxxx.html中的xxxx從哪裡來呢?得不到。而且「product-details.php?id=1392」 這種形式的URL是你最終程序route處理的url,你把它rewrite到某種形式,肯定還得rewrite回來,在兜圈子。+ H% J ?# o- _0 }. n5 {0 K
+ y: n2 f+ c$ S0 t. @如果要處理你現在的重複收錄,我能想到的兩種方式,一種就是讓收錄的url都定向到原始url,也就是「product-details.php?id=1392」 這種形式。這種方案,只需要把已經收錄的B 301定向到A。8 j9 X: O6 _, H) Z+ a
2 K) f4 r: m/ A6 t0 p8 S" o另一種就是需要改一下你用的程序的前台模板(甚至可能需要改一下程序),就是使用canonical標籤。以wordpress為例,wordpress原始url是這樣的:- http://www.yoursite.com/?p=postid0 R* I8 C, a& Y* G4 A7 w. T8 W( b
- 即
' W, }- d* U. J6 i* g - http://www.yoursite.com/?p=1392
複製代碼 wordpress設置「friendly URL」之後,可以變成這樣:- http://www.yoursite.com/post-name
: O, o% {) Q/ P0 ?- \, p' A - 即
! J0 X0 ^; N9 V8 P+ }2 P - http://www.yoursite.com/tao-of-badass
複製代碼 這樣就有兩個url,一個是原生url,另一個是「搜索引擎友好的」或者「用戶友好的」url,但是都指向同一個頁面。為了告訴搜索引擎只收錄「友好的」url,可以修改模板,在單頁模板的html head裡增加兩個標籤:- <link rel="canonical" href="http://www.yoursite.com/post-name">
2 Y' l, g* a q# u0 d! r$ w - <link rel="shortlink" href="http://www.yoursite.com/?p=postid">
複製代碼 這樣Google就知道,兩個url是同一個頁面,並且以http://www.yoursite.com/post-name為主。
/ ?" v" W# B& ^2 l" Y& k5 A(注意我上面canonical標籤裡的post-name、postid只是舉例說明,不是通用寫法,每個id對應的單頁,id和name都不一樣,需要修改模板,調用你程序提供的訪問這兩種url的函數來寫)
/ M: S) p0 O# B) ~) D U* O4 w8 x$ x& {2 v/ R
1 f0 o& V) F* P6 H i2 E ^( T |