过期域名预定抢注

 找回密碼
 免费注册

求助:Url RewriteRule

  [複製鏈接]
發表於 2014-1-20 13:22:54 | 顯示全部樓層 |閱讀模式
本帖最後由 amnoob 於 2014-1-20 13:25 編輯 - k' }. Z7 a; Q0 T( G" [
$ E6 Q" x$ x0 H% B
不懂程序就是麻煩啊,9 W8 T* `* F1 G; i

& h$ l+ ~  a+ e; s9 \求一條RewriteRule的寫法:

  1. + b0 F+ @# [. z+ e
  2. Options +FollowSymLinks $ R! G; ?$ d' w# @9 h
  3. RewriteEngine On
    / ?: k  }5 V% A+ u  E4 t
  4. RewriteRule ^(.*).html$ $1.php [L]$ F8 x( i) m; \( a" c; ]
  5. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]   
    - _. r  M+ w4 e0 r9 B$ @( S+ O" m$ ]
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼

  1. & b- p3 }) Q4 b. M$ C7 E1 Y0 W3 \
  2. RewriteRule ^(.*)/(.*)$ product-details.php?id=$1 [QSA]* p7 s" P" F0 H
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
求助:要怎麼寫才能讓Url把」product id「也省了啊,讓它直接輸出
  1. http://www.mydomain.com/tao-of-badass.html
複製代碼
* J. [5 U9 F( N$ f& l  o9 C
發表於 2014-1-20 14:28:33 | 顯示全部樓層
ID 貌似不能去啊 去了 apache或者NGINX就不知道具體是什麼網址了
, b2 Z3 S' E' ]4 h& Y& n
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 14:57:10 | 顯示全部樓層
ID不能去掉,可以移動到文件名後面
2 u  G# s% O2 p. S! c1 {) `
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:01:36 | 顯示全部樓層
看你的程序是否支持通過文件名獲取文章
; I/ S: n3 v- ?7 q- J* f5 n* W* N
2 p0 t: u5 l4 G: Z( [7 t! {! W3 d# n$ a. w) A) T) a# x

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-20 15:13:33 | 顯示全部樓層
多謝各位!8 O9 d8 i0 S% I$ O! {. R
' ^, Q! A+ J0 O6 `* e2 i
回2#、3#,我覺得肯定是可以去掉id#的,像WP一樣去掉page id(article id),直接輸出如
http://mydomain.com/article-name.html
這樣的url的啊6 G: c3 y, e4 h  u

) U+ w5 X$ q. g; B% M回4#,程序肯定是支持的,因為我看到別人的使用同一程序的網站就是把id#去掉的url,只是不知道人家的RewriteRule怎麼寫啊
' Y! ?+ ^5 B; K
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:22:15 | 顯示全部樓層
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly url設置
9 n9 Z- d3 R1 L5 C/ T$ j

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-23 14:37:56 | 顯示全部樓層
咚咚來了 發表於 2014-1-20 15:22
! a8 C1 F8 y* r; g應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly ur ...

/ {3 _  A3 w1 }6 p
( T; D" L) c1 I, u7 l多謝!
2 e: V' ]" }$ i- P! \0 E6 Z0 g" y5 F
程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  
1 h! R# ?8 g- _" W# \" w: C2 j. x7 P) m  d0 I4 X# a' t* ^
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 13:16:24 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 13:18 編輯 $ ~% a; @* D, F5 t
amnoob 發表於 2014-1-23 14:37 8 k  B+ D5 J! G* ~; Q
多謝!
. Y- w/ |& b5 H" q+ w1 A  ~0 \, k; \% l" O3 l) \* c* n6 k
程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  :di ...

$ G9 [4 p4 q) D. ?% ], G不清楚你用的什麼程序。; f% ~; Y0 I3 ?% D

" k  @, A3 Q- ^9 q' n不過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的。
" E$ Z' c1 ?+ W
# ^- N6 y/ n& ]2 y) V. J9 V但是apache只能做到這一步。剩下的就是你的程序根據請求的功能和附帶參數去處理。例如這個例子就是調用product-details相關功能,去數據庫取產品id為1392的數據,處理後返回給瀏覽器。
" M! j, ^0 I3 K
! f) |, n; B7 B因此,你想省略id,必須需要你的程序支持。例如,wordpress就支持。wordpress就可以設置省略post id,但是需要提供slug,就是post name, 類似於你舉例中的「tao-of-badass」
9 P9 z  a% W6 t. g6 `$ h; F* A. p$ ^
3 Z, f' g5 z4 W& z
% M$ j, a4 F- [/ f

+ o; J5 [6 F. y( `6 \6 R$ b
- r' A/ a7 [" Y* s& J1 ^3 k9 ]* i7 l3 D, Y" h) h
8 [7 h! r2 {8 `7 k

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-24 15:14:15 | 顯示全部樓層
咚咚來了 發表於 2014-1-24 13:16
* T6 g+ s' ]( z, S2 P6 i9 F6 [( C不清楚你用的什麼程序。
7 q7 U7 F( E4 V2 U" w3 r
+ @6 e" o# @# |/ ]0 F不過web程序都一個道理。 apache rewrite只是簡單地映射, 就比如你主樓帖子寫的 ...

4 m' R( Q8 q& t' G6 f. [非常感謝!
4 s: V/ c; @8 [  o' P# Z$ _5 H
" ^6 A' @0 k1 T; r. i. i* R我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人家的站,同名的產品時它會自動在url中加上"-1"/"-2"/"-3"這樣(比如我舉的例子「tao-of-badass.html」, "tao-of-badass-2.html");這個肯定是通過php實現的吧?
" X5 p* H1 f( s" o' _) S$ j! t( H+ M; c# p& X( R& Q. \
看樣子我只能放棄這個省略id的想法了。
# X  {7 n; }2 H" u
  D! \& e- p* C' K0 q再請教一下兄台哦:4 `0 f8 Z- E* V, ?7 T0 F" d8 X; {
5 y  g4 a7 @& k
我現在好多頁面都被google重複收錄了兩次,因為我自己站內url是用
  1.   y  b4 g4 V0 [# |. ~$ @; i) U. `
  2. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]; m% m* `7 N6 q6 U% B
複製代碼
  1. 6 L: h) E  |  V* r# F0 g# ~
  2. "http://www.mydomain.com/1392/任何url可識別的規範化字符"如我例子中的"http://www.mydomain.com/1392/tao-of-badass.html"
複製代碼
這樣的格式;6 I! B/ n3 p! ]" A" ?% q
% C* e6 I% F3 A! i  f  n
外鏈站因為是rss訂閱的,用的是程序的原始url即
  1. ! T) j$ t; ]4 S6 q
  2. http://www.mydomain.com/product-details.php?id=1392- e; V7 ?2 G- ]8 ~" C  h+ ^
複製代碼
這樣的格式. / x0 L: b+ z/ \) S. }, T5 K, {
* o$ T: o! T& E  }/ V
現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」4 H# A  M) e: F# f8 q/ P
, w: `) I" p; r& p, D/ n+ Z
這個RewrtieRule應該怎麼寫呢?
- E% T; g6 ]6 n9 b4 S4 u6 [! U4 ~
4 C' i* l( q1 B我想當然地以為是
  1. ' R% f" ^) C6 S/ T6 ?
  2. RewriteRule ^product-details.php?id=([0-9]+)$ ([0-9]+)/$1
    3 m$ G/ z% L# T+ s
複製代碼
結果不行啊.
7 n+ K8 J: h: e( M' z( z. }8 O5 ~' _4 m* c

6 @% _4 B$ Z; G7 h0 j
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 19:08:25 | 顯示全部樓層
本帖最後由 咚咚來了 於 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 iyousite.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_id9 f. E% w2 q6 E
只需一條:
  1. Options +FollowSymLinks 0 {- E" d# ^; k7 w# L
  2. RewriteEngine On
    - E1 K$ z5 |' O1 K! J! W
  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,更不用說通過瀏覽器訪問了。
$ _1 s, p2 ]! Q: a$ Q" m1 J
  F7 M. t  X2 E, U
% V3 D* q4 P& _" A' x4 f2. 第二個問題
  1. URL形式 A:
    # ?9 C7 h+ y4 ?& L  Y+ K8 `
  2. http://www.mydomain.com/product-details.php?id=1392
複製代碼
  1. URL形式 B:0 M) K2 e4 l+ l7 V
  2. 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是這樣的:
  1. http://www.yoursite.com/?p=postid
    8 S6 u% x: {2 B3 v9 I

  2. * g9 q3 e( [2 k; o( y' D
  3. http://www.yoursite.com/?p=1392
複製代碼
wordpress設置「friendly URL」之後,可以變成這樣:
  1. http://www.yoursite.com/post-name
    & c. d4 j  w2 C, D/ o7 M6 Z

  2. 6 t  o" B4 e) w/ a" O. W6 o1 O
  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">' a8 ~3 N* y" i+ c, [. j
  2. <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

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

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

本版積分規則

过期高净值品牌域名预定抢注

點基跨境 數位編輯創業論壇

GMT+8, 2025-7-7 05:11

By DZ X3.5

小黑屋

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