本帖最後由 咚咚來了 於 2014-1-24 19:13 編輯 0 ?7 N9 m {$ u: j
amnoob 發表於 2014-1-24 15:14 % c/ _0 A1 d p: j2 Q7 b- x; A
非常感謝!
3 Y+ f2 _8 n8 H9 S' E
: x( w7 j9 g4 g我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人 ...
$ P& ?2 U" [4 Y1. 第一個問題
5 X2 j# V9 X% C8 @# J你舉例說的別人的網站,有可能後面那個就是id, 這也是很常見的一種做法,特別是中文cms,因為中文的cms多數都不支持slug。
& b( H3 B4 m* {0 J' M+ S4 i把 yousite.com/tao-of-badass-1392.html rewrite到 product-details.php?id=1392 可以做到,也就是把
2 P/ `7 N* U* u! n/ l j- M形如yousite.com/product_name-product_id.html rewrite到 product-details.php?id=product_id 。9 f. E% w2 q6 E
只需一條:- Options +FollowSymLinks 0 {- E" d# ^; k7 w# L
- RewriteEngine On
- E1 K$ z5 |' O1 K! J! W - RewriteRule ^(.*)-([0-9]+)\.html$ product-details.php?id=$2 [QSA]
複製代碼 但是這有個前提,就是你能把你網站的URL格式設置成 yousite.com/XXXXX-xxx.html 的形式(大寫XXXX代表類似的「tao-of-badass」的東西,小寫xxx代表類似1392的id), 不然用戶根本得不到這種形式的url,更不用說通過瀏覽器訪問了。
$ _1 s, p2 ]! Q: a$ Q" m1 J
F7 M. t X2 E, U
% V3 D* q4 P& _" A' x4 f2. 第二個問題- URL形式 A:
# ?9 C7 h+ y4 ?& L Y+ K8 ` - http://www.mydomain.com/product-details.php?id=1392
複製代碼- URL形式 B:0 M) K2 e4 l+ l7 V
- http://www.mydomain.com/1392/tao-of-badass.html
複製代碼 首先確定你的這個1392到底什麼,以下假設是product id,否則如果是其他的,例如分類id,那就很不一樣了。8 T; E, p/ o; Z5 N; o' f
3 \2 v M5 A; l! Z. Y
如果想從B rewrite到A很容易,因為形式A就需要一個id,B的1392可以傳過去。 但是要反過來,想把A rewrite到B,也就是你說的:
4 D1 s" Q: t [/ _現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」 # D4 U( w! Y3 F# f' I% Z; p' _
可能就不行了(我覺得不行,其他兄弟有沒有會的?)。因為對於不同的id,B後面的xxxx.html中的xxxx從哪裡來呢?得不到。而且「product-details.php?id=1392」 這種形式的URL是你最終程序route處理的url,你把它rewrite到某種形式,肯定還得rewrite回來,在兜圈子。
7 i1 Z/ q p8 l( l' p# m- n, b4 S' u# M! l4 P0 g, t a
如果要處理你現在的重複收錄,我能想到的兩種方式,一種就是讓收錄的url都定向到原始url,也就是「product-details.php?id=1392」 這種形式。這種方案,只需要把已經收錄的B 301定向到A。
& D4 C, O& p" y) @6 w3 b" U3 A7 d' s: K5 Z! o' A) c3 D7 p
另一種就是需要改一下你用的程序的前台模板(甚至可能需要改一下程序),就是使用canonical標籤。以wordpress為例,wordpress原始url是這樣的:- http://www.yoursite.com/?p=postid
8 S6 u% x: {2 B3 v9 I - 即
* g9 q3 e( [2 k; o( y' D - http://www.yoursite.com/?p=1392
複製代碼 wordpress設置「friendly URL」之後,可以變成這樣:- http://www.yoursite.com/post-name
& c. d4 j w2 C, D/ o7 M6 Z - 即
6 t o" B4 e) w/ a" O. W6 o1 O - http://www.yoursite.com/tao-of-badass
複製代碼 這樣就有兩個url,一個是原生url,另一個是「搜索引擎友好的」或者「用戶友好的」url,但是都指向同一個頁面。為了告訴搜索引擎只收錄「友好的」url,可以修改模板,在單頁模板的html head裡增加兩個標籤:- <link rel="canonical" href="http://www.yoursite.com/post-name">' a8 ~3 N* y" i+ c, [. j
- <link rel="shortlink" href="http://www.yoursite.com/?p=postid">
複製代碼 這樣Google就知道,兩個url是同一個頁面,並且以http://www.yoursite.com/post-name為主。# O5 i6 a0 Q" L, R# G
(注意我上面canonical標籤裡的post-name、postid只是舉例說明,不是通用寫法,每個id對應的單頁,id和name都不一樣,需要修改模板,調用你程序提供的訪問這兩種url的函數來寫)
5 i- r1 {' s* L- B: M% i# M# `% m( ~0 r% }
0 n; y+ ]* c3 `8 {, j
|