过期域名预定抢注

 找回密碼
 免费注册

求助:Url RewriteRule

  [複製鏈接]
發表於 2014-1-20 13:22:54 | 顯示全部樓層 |閱讀模式
本帖最後由 amnoob 於 2014-1-20 13:25 編輯 , i9 C. V. w5 V/ P. o

) Z( R7 M6 X1 |不懂程序就是麻煩啊,9 M  Z. n; v' Z& m3 Z2 _

; r, p6 ]1 [: P0 z求一條RewriteRule的寫法:

  1. $ I6 D- s) r9 Q6 c% f3 e, k/ U- l0 |
  2. Options +FollowSymLinks $ h$ Q- A5 p8 P: k
  3. RewriteEngine On9 ]$ {1 _4 a7 d* b  O
  4. RewriteRule ^(.*).html$ $1.php [L]
    : ~. h, \0 a9 v& _& ]$ P. ~+ J2 S
  5. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]   
    ) s0 D1 D9 U0 z# e
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
  1. ) ^: T' J8 f6 U) x' I
  2. RewriteRule ^(.*)/(.*)$ product-details.php?id=$1 [QSA]/ {2 i1 X7 |- S& Y! w
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
求助:要怎麼寫才能讓Url把」product id「也省了啊,讓它直接輸出
  1. http://www.mydomain.com/tao-of-badass.html
複製代碼
$ a2 L+ ?5 A' H; W1 |; i, ]3 D
發表於 2014-1-20 14:28:33 | 顯示全部樓層
ID 貌似不能去啊 去了 apache或者NGINX就不知道具體是什麼網址了
5 u0 E- V+ A' ]8 n8 X0 Y' g9 c. |* S0 h
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 14:57:10 | 顯示全部樓層
ID不能去掉,可以移動到文件名後面
% `- @/ S( k" P* Z6 {* e3 y
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:01:36 | 顯示全部樓層
看你的程序是否支持通過文件名獲取文章  D2 t1 D# K' A0 Q

0 q2 J; u9 ~3 u' c" H. P; ]7 i
1 K+ L( ~! A7 r% |6 O: b& J7 N

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-20 15:13:33 | 顯示全部樓層
多謝各位!
5 p/ _+ O. ]( L+ U9 J& {' x$ W' q* t; e; @5 d6 ~/ @8 |# P
回2#、3#,我覺得肯定是可以去掉id#的,像WP一樣去掉page id(article id),直接輸出如
http://mydomain.com/article-name.html
這樣的url的啊& f% S, _: D( i/ w( Y6 E

; }1 W  l+ E9 r/ S/ q, H) w, \8 V' E回4#,程序肯定是支持的,因為我看到別人的使用同一程序的網站就是把id#去掉的url,只是不知道人家的RewriteRule怎麼寫啊 , U6 ~4 X1 E8 `) o, A0 Q( i0 U" B
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:22:15 | 顯示全部樓層
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly url設置
1 r( p7 k( o3 }: `% r2 `* S$ Q  [6 a/ Z

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-23 14:37:56 | 顯示全部樓層
咚咚來了 發表於 2014-1-20 15:22 " E1 ?* v" m) I6 M8 d6 Y
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly ur ...

7 e0 |0 R+ |# Y- j$ _! [/ D4 C7 `- j. G4 h; w
多謝!
; }! K* k9 v- {/ ]1 m2 Q! {4 t8 D3 J- k) G$ [* N
程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  6 |; M7 H+ F* T3 {( O% B
: M+ Q. K+ n! L+ Z9 c+ Y2 E
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 13:16:24 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 13:18 編輯
/ z0 X9 D% ~5 w: W. n) V  {
amnoob 發表於 2014-1-23 14:37
( f- X5 Y% Y% |4 {7 ^1 E( E多謝!' }& e$ u6 @0 K

- i5 J- M( h, b+ \+ _程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  :di ...

+ s3 _* b9 Y2 t% I& v$ U不清楚你用的什麼程序。! @9 f8 I% G8 t# L. r( [
5 I* n0 @4 {5 V8 J3 i8 ~
不過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的。
) ~& T8 Z) Y0 G  w( w# I! C1 q& e1 D1 D- h. F
但是apache只能做到這一步。剩下的就是你的程序根據請求的功能和附帶參數去處理。例如這個例子就是調用product-details相關功能,去數據庫取產品id為1392的數據,處理後返回給瀏覽器。3 e9 K+ b# F. N( D  R. D* ~
8 M  {& M+ ]1 D4 C
因此,你想省略id,必須需要你的程序支持。例如,wordpress就支持。wordpress就可以設置省略post id,但是需要提供slug,就是post name, 類似於你舉例中的「tao-of-badass」7 f' a* y: D/ g& \6 O' P+ e/ o

& \/ k/ j3 Z7 R2 t2 s
; A  Q5 R+ g& w$ J% e
& W! j1 w5 ]9 a
% R( n* m1 T1 u. W9 H% K$ D
2 j" A: ?" C& i" N! M. U2 l8 }7 F5 l0 w- C
) c' Z3 c$ S: Q# c

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-24 15:14:15 | 顯示全部樓層
咚咚來了 發表於 2014-1-24 13:16 ) o  K. }' L0 m9 ]/ Y  V/ P
不清楚你用的什麼程序。, w3 P, p. @2 t% _* f& l/ n! H
! |# q3 B  k, H  l
不過web程序都一個道理。 apache rewrite只是簡單地映射, 就比如你主樓帖子寫的 ...

) j. ^6 J$ o3 `7 W, P! g0 W" B: l非常感謝!
' W; h/ o& h  t( r( V6 r5 L$ Q* J$ K5 y: W' f, m/ {/ k" S* x
我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人家的站,同名的產品時它會自動在url中加上"-1"/"-2"/"-3"這樣(比如我舉的例子「tao-of-badass.html」, "tao-of-badass-2.html");這個肯定是通過php實現的吧?
! z5 A3 O# u8 h# q) m# M% E
, l  w8 D+ E5 L2 ?看樣子我只能放棄這個省略id的想法了。0 q7 V6 d% z- D$ y5 r, w

5 B0 A8 E1 p! t" }4 B, T% |再請教一下兄台哦:
) I  v6 J" g" k# \
' y3 K  _4 @- \3 d我現在好多頁面都被google重複收錄了兩次,因為我自己站內url是用
  1. # O4 \& }! Z' T( X' K3 S
  2. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]
    / Z1 ~! _  r9 c& l* Q
複製代碼
  1. + F2 p+ ^3 ^+ S! d3 ^" |7 I
  2. "http://www.mydomain.com/1392/任何url可識別的規範化字符"如我例子中的"http://www.mydomain.com/1392/tao-of-badass.html"
複製代碼
這樣的格式;3 K; b: ?9 m% C) X; o2 ^
5 P* J) S# @1 b' [
外鏈站因為是rss訂閱的,用的是程序的原始url即

  1. 3 M5 V& G, o5 p. t; j
  2. http://www.mydomain.com/product-details.php?id=1392. c7 z# R3 t) x4 Q* x6 [6 T4 g1 e
複製代碼
這樣的格式.
8 x, @; j( u2 L% x+ ]2 d4 v9 n* p0 ?! }! g/ y3 T: }) E6 a
現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」
0 t7 L0 H' I( t- Q) d2 K( ?$ i0 X1 C' H/ g" k
這個RewrtieRule應該怎麼寫呢?% b# F  q: O2 V7 J; n/ i; }
5 p3 p3 c% d1 m+ N( ^
我想當然地以為是

  1. + p/ E% I6 I+ q- F+ u! v; p/ F
  2. RewriteRule ^product-details.php?id=([0-9]+)$ ([0-9]+)/$1
    9 d; O4 l4 B$ l4 A
複製代碼
結果不行啊.
% `& r# n$ A9 j1 H0 {7 u
- X: Q6 k9 O) V# p8 A$ i1 Z$ m* a6 e( x' |2 g* H& L
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 19:08:25 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 19:13 編輯
; i7 E; U! F8 O
amnoob 發表於 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+ fyousite.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
只需一條:
  1. Options +FollowSymLinks
    , W1 }6 C2 @3 S& c( V' n( ^, ~
  2. RewriteEngine On6 s: j  S$ J* p3 y
  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,更不用說通過瀏覽器訪問了。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. 第二個問題
  1. URL形式 A:
    , f9 U; r4 M0 Z/ X# F/ @
  2. http://www.mydomain.com/product-details.php?id=1392
複製代碼
  1. URL形式 B:# ^, t7 i* V9 V5 R- Z
  2. 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是這樣的:
  1. http://www.yoursite.com/?p=postid0 R* I8 C, a& Y* G4 A7 w. T8 W( b

  2. ' W, }- d* U. J6 i* g
  3. http://www.yoursite.com/?p=1392
複製代碼
wordpress設置「friendly URL」之後,可以變成這樣:
  1. http://www.yoursite.com/post-name
    : O, o% {) Q/ P0 ?- \, p' A

  2. ! J0 X0 ^; N9 V8 P+ }2 P
  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">
    2 Y' l, g* a  q# u0 d! r$ w
  2. <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

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

GMT+8, 2024-11-25 05:38

By DZ X3.5

小黑屋

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