本帖最後由 咚咚來了 於 2014-1-24 19:13 編輯 4 {% s2 [# A- L; R, T4 Q
amnoob 發表於 2014-1-24 15:14 ; W: g' t5 b/ s( \; `) k$ [& X- S
非常感謝!- [/ L/ u& n! M1 d, C8 [
: C9 C1 P& t+ L0 F
我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人 ... . `- d1 }0 z1 Z! Q
1. 第一個問題
8 g$ A* r1 M4 p5 l% y2 j; l( n你舉例說的別人的網站,有可能後面那個就是id, 這也是很常見的一種做法,特別是中文cms,因為中文的cms多數都不支持slug。
0 b/ j) @) s$ G. W6 ?2 o把 yousite.com/tao-of-badass-1392.html rewrite到 product-details.php?id=1392 可以做到,也就是把, y5 U% V0 S) S* R$ \! Y% T0 K# K v
形如yousite.com/product_name-product_id.html rewrite到 product-details.php?id=product_id 。$ V7 h5 c% L, S1 y. ~
只需一條:- Options +FollowSymLinks
+ k4 f* v+ v4 j" b8 _$ k - RewriteEngine On) j6 M) f6 l! f
- RewriteRule ^(.*)-([0-9]+)\.html$ product-details.php?id=$2 [QSA]
複製代碼 但是這有個前提,就是你能把你網站的URL格式設置成 yousite.com/XXXXX-xxx.html 的形式(大寫XXXX代表類似的「tao-of-badass」的東西,小寫xxx代表類似1392的id), 不然用戶根本得不到這種形式的url,更不用說通過瀏覽器訪問了。: O" H6 | X& _- `4 e
( q+ M! l0 W; ~" H! e
b+ e2 [5 v' P. |9 U9 D2. 第二個問題- URL形式 A:
% D+ _2 A% X) E% g; p3 \& R; p. E - http://www.mydomain.com/product-details.php?id=1392
複製代碼- URL形式 B:; O! K+ V7 X$ o( V
- http://www.mydomain.com/1392/tao-of-badass.html
複製代碼 首先確定你的這個1392到底什麼,以下假設是product id,否則如果是其他的,例如分類id,那就很不一樣了。
1 G+ A' j/ m e& |1 g: {. m. d5 v' a& ^
如果想從B rewrite到A很容易,因為形式A就需要一個id,B的1392可以傳過去。 但是要反過來,想把A rewrite到B,也就是你說的:
5 B( ?$ B p5 \) q. s現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」
( @! f, f( F) _4 M: L! |* r可能就不行了(我覺得不行,其他兄弟有沒有會的?)。因為對於不同的id,B後面的xxxx.html中的xxxx從哪裡來呢?得不到。而且「product-details.php?id=1392」 這種形式的URL是你最終程序route處理的url,你把它rewrite到某種形式,肯定還得rewrite回來,在兜圈子。2 |: G0 I6 m, E2 ^" S
& ?3 {, x( G4 b+ l; d, u" u
如果要處理你現在的重複收錄,我能想到的兩種方式,一種就是讓收錄的url都定向到原始url,也就是「product-details.php?id=1392」 這種形式。這種方案,只需要把已經收錄的B 301定向到A。
4 }) t0 R3 l; Z# s3 j5 v! d' ~" z" R# b5 A. s- E! W
另一種就是需要改一下你用的程序的前台模板(甚至可能需要改一下程序),就是使用canonical標籤。以wordpress為例,wordpress原始url是這樣的:- http://www.yoursite.com/?p=postid, g1 U1 n5 U; d2 h! A
- 即
5 F" n8 @8 o2 S1 q$ H# }8 W5 l - http://www.yoursite.com/?p=1392
複製代碼 wordpress設置「friendly URL」之後,可以變成這樣:- http://www.yoursite.com/post-name
; o# c: C: [6 l0 \1 W. S - 即0 P* n/ W7 A, n
- http://www.yoursite.com/tao-of-badass
複製代碼 這樣就有兩個url,一個是原生url,另一個是「搜索引擎友好的」或者「用戶友好的」url,但是都指向同一個頁面。為了告訴搜索引擎只收錄「友好的」url,可以修改模板,在單頁模板的html head裡增加兩個標籤:- <link rel="canonical" href="http://www.yoursite.com/post-name">
}( s+ ?& ^; y# a3 x' q - <link rel="shortlink" href="http://www.yoursite.com/?p=postid">
複製代碼 這樣Google就知道,兩個url是同一個頁面,並且以http://www.yoursite.com/post-name為主。
C" `! [+ C9 r: E N0 w! D9 b4 ^: e(注意我上面canonical標籤裡的post-name、postid只是舉例說明,不是通用寫法,每個id對應的單頁,id和name都不一樣,需要修改模板,調用你程序提供的訪問這兩種url的函數來寫)9 h# V, A+ D0 t/ l7 c. N
! S$ m/ [( i# d2 `& f
, j- d4 w. P d* B% O) f |