过期域名预定抢注

 找回密碼
 免费注册

求助:Url RewriteRule

  [複製鏈接]
發表於 2014-1-20 13:22:54 | 顯示全部樓層 |閱讀模式
本帖最後由 amnoob 於 2014-1-20 13:25 編輯 # W& W  ~( ^) G& e
$ |" ~- o& N- ]- G
不懂程序就是麻煩啊,
3 a! h% d. U4 c5 E- n1 Z; D! N" H1 r
求一條RewriteRule的寫法:

  1.   u4 n6 h3 a! `- L
  2. Options +FollowSymLinks
      h" }6 ?  i- Y. N
  3. RewriteEngine On
    % v' T( {( B) i4 M
  4. RewriteRule ^(.*).html$ $1.php [L]8 W7 h1 v8 ~9 [) g& S$ V+ L
  5. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]   
    : I7 Y0 y4 B# g& u( j
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼

  1. ( C: o8 ]* W) @4 x- \4 L
  2. RewriteRule ^(.*)/(.*)$ product-details.php?id=$1 [QSA]  I; I# ~( Z7 N0 P" B! ]! Q
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
求助:要怎麼寫才能讓Url把」product id「也省了啊,讓它直接輸出
  1. http://www.mydomain.com/tao-of-badass.html
複製代碼
& }+ s  ^2 a- A8 [7 y1 H
發表於 2014-1-20 14:28:33 | 顯示全部樓層
ID 貌似不能去啊 去了 apache或者NGINX就不知道具體是什麼網址了- F) F% i& ?: |7 @
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 14:57:10 | 顯示全部樓層
ID不能去掉,可以移動到文件名後面
" ~; x+ H" P3 O$ K: n7 V
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:01:36 | 顯示全部樓層
看你的程序是否支持通過文件名獲取文章
2 e) |) h: y1 Z% ~6 X0 B" H  m' j6 e  r$ t! O

' p5 Q9 k1 @, p* F$ S  F$ W3 d

評分

參與人數 1點點 +1 收起 理由
amnoob + 1 送花花~~~

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-20 15:13:33 | 顯示全部樓層
多謝各位!
; p$ {1 J) Z2 T, E/ w2 f" j3 S  J3 L
回2#、3#,我覺得肯定是可以去掉id#的,像WP一樣去掉page id(article id),直接輸出如
http://mydomain.com/article-name.html
這樣的url的啊3 X. K% x5 }! x- o7 ?4 q8 |
0 m; `/ u; r4 ]8 n4 M7 ~
回4#,程序肯定是支持的,因為我看到別人的使用同一程序的網站就是把id#去掉的url,只是不知道人家的RewriteRule怎麼寫啊 4 h' H: Z" ]9 m6 c+ W5 n
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:22:15 | 顯示全部樓層
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly url設置* l9 Z: T) ?9 |9 F4 `

評分

參與人數 1點點 +1 收起 理由
amnoob + 1 送花花~~~

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-23 14:37:56 | 顯示全部樓層
咚咚來了 發表於 2014-1-20 15:22 / R/ f8 d$ ?' w. @6 p
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly ur ...

  x& X0 R9 Y. G" i( f
5 v$ [  F7 K( l多謝!
0 x. T  S" v# t
1 T9 ?* v8 F1 [程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  
9 F" R6 T9 t  r; ?7 I4 w7 \6 m1 [6 W. k8 @
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 13:16:24 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 13:18 編輯 - l" f8 a. h7 e  c0 a& }7 B
amnoob 發表於 2014-1-23 14:37 ! e) T: @7 P( C& z" {7 t0 R
多謝!" u! k% n1 {( Y  v

! N8 q) S: X; M3 @" `) u程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  :di ...

5 R1 }- p" u$ F% D; K不清楚你用的什麼程序。" X: U# i1 p7 ~1 }5 D

0 X% k0 e- |/ q  j不過web程序都一個道理。 apache rewrite只是簡單地映射, 就比如你主樓帖子寫的例子,把用戶請求的url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
映射成:
  1. http://www.mydomain.com/product-details.php?id=1392
複製代碼
注意後面的"?id=xxx",你要熟悉編程的話,就知道這是query string,就是請求參數,意思是:我要請求產品細節,哪個產品的?id為1392的。
/ l3 r+ K4 N. l
4 \/ v, V# f9 C  c: Q5 W( B* y但是apache只能做到這一步。剩下的就是你的程序根據請求的功能和附帶參數去處理。例如這個例子就是調用product-details相關功能,去數據庫取產品id為1392的數據,處理後返回給瀏覽器。0 c3 l4 ?% [, F. P" J
# X1 B7 Q% U3 l  Q! O
因此,你想省略id,必須需要你的程序支持。例如,wordpress就支持。wordpress就可以設置省略post id,但是需要提供slug,就是post name, 類似於你舉例中的「tao-of-badass」1 V  X+ ]% U, {5 C3 X* _* v; G

+ c! r( H/ V# p# J- O, J6 L+ f
6 Q+ ^* k( d5 X" G. Q/ z4 K
6 p8 b3 F6 P" F" G! v3 G" }: P/ |6 K  T, b0 c! C3 }) g+ ?9 F. o2 L
$ h! p" u- z1 Y& e' k; s- Q8 v

/ J$ a+ u" `( r7 E
# w# Z. p* j' h' U% G6 S8 B

評分

參與人數 1點點 +1 收起 理由
amnoob + 1 非常感谢!

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-24 15:14:15 | 顯示全部樓層
咚咚來了 發表於 2014-1-24 13:16
& \# ]6 C) o1 Q' e不清楚你用的什麼程序。* u0 K- p* v8 l9 n9 }
. o) v% z( V9 S# U
不過web程序都一個道理。 apache rewrite只是簡單地映射, 就比如你主樓帖子寫的 ...
$ i: P, B) N$ F- W2 i8 y* m
非常感謝!
6 W1 h' P5 |. p3 v: Y) x; m, A& Z& a5 d8 o1 U
我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人家的站,同名的產品時它會自動在url中加上"-1"/"-2"/"-3"這樣(比如我舉的例子「tao-of-badass.html」, "tao-of-badass-2.html");這個肯定是通過php實現的吧?7 j8 h; U5 }; ?# W& {
% D' ^2 h) b  ^' w
看樣子我只能放棄這個省略id的想法了。: T2 n$ [7 ?+ U7 j# @3 A8 Q
. q: X0 I) K) m" x
再請教一下兄台哦:: l* |1 f2 O" J' y& v
! V8 M/ Y4 f6 E6 C8 v0 M; |" ?
我現在好多頁面都被google重複收錄了兩次,因為我自己站內url是用

  1. ( T: C* n7 q6 n/ d4 L
  2. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]
    0 ~5 n: E3 M8 |
複製代碼
  1. 3 [  J* L; n2 O3 m4 R2 q
  2. "http://www.mydomain.com/1392/任何url可識別的規範化字符"如我例子中的"http://www.mydomain.com/1392/tao-of-badass.html"
複製代碼
這樣的格式;
! ]6 E$ \/ t2 V5 V5 U! h" I# i6 |8 x
外鏈站因為是rss訂閱的,用的是程序的原始url即
  1. : R2 V  Z* I+ q
  2. http://www.mydomain.com/product-details.php?id=1392. A$ |; j0 B3 l# I& e. k; Z
複製代碼
這樣的格式. ! e9 X# z$ C& P0 t! |
: ]/ k2 _1 A* V, g5 @3 e" k' t
現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」( v( ?/ v/ j+ s, a+ q
% K5 t7 _# ^6 V1 Z$ i
這個RewrtieRule應該怎麼寫呢?
8 g& {5 e% I" w' I7 A
1 d$ h% Z8 Q3 X我想當然地以為是

  1. 4 P' m; n# N2 W2 I( b- G7 I
  2. RewriteRule ^product-details.php?id=([0-9]+)$ ([0-9]+)/$1
    ( |  R  `/ x' @
複製代碼
結果不行啊. # o+ Q7 [8 s5 @# m

. n+ D# U/ \5 A
6 o4 D$ r! o* g4 L
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 19:08:25 | 顯示全部樓層
本帖最後由 咚咚來了 於 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 oyousite.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. ~
只需一條:
  1. Options +FollowSymLinks
    + k4 f* v+ v4 j" b8 _$ k
  2. RewriteEngine On) j6 M) f6 l! f
  3. 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. 第二個問題
  1. URL形式 A:
    % D+ _2 A% X) E% g; p3 \& R; p. E
  2. http://www.mydomain.com/product-details.php?id=1392
複製代碼
  1. URL形式 B:; O! K+ V7 X$ o( V
  2. 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是這樣的:
  1. http://www.yoursite.com/?p=postid, g1 U1 n5 U; d2 h! A

  2. 5 F" n8 @8 o2 S1 q$ H# }8 W5 l
  3. http://www.yoursite.com/?p=1392
複製代碼
wordpress設置「friendly URL」之後,可以變成這樣:
  1. http://www.yoursite.com/post-name
    ; o# c: C: [6 l0 \1 W. S
  2. 0 P* n/ W7 A, n
  3. http://www.yoursite.com/tao-of-badass
複製代碼
這樣就有兩個url,一個是原生url,另一個是「搜索引擎友好的」或者「用戶友好的」url,但是都指向同一個頁面。為了告訴搜索引擎只收錄「友好的」url,可以修改模板,在單頁模板的html head裡增加兩個標籤:
  1. <link rel="canonical" href="http://www.yoursite.com/post-name">
      }( s+ ?& ^; y# a3 x' q
  2. <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

評分

參與人數 1點點 +2 收起 理由
站群100 + 2 認眞參與

查看全部評分

回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

4um點基跨境網編創業社區

GMT+8, 2024-11-25 07:40

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表