过期域名预定抢注

 找回密碼
 免费注册

求助:Url RewriteRule

  [複製鏈接]
發表於 2014-1-20 13:22:54 | 顯示全部樓層 |閱讀模式
本帖最後由 amnoob 於 2014-1-20 13:25 編輯
0 U# w) Y" ~; ~6 C4 H5 B; t5 ~4 R& _3 I$ R
不懂程序就是麻煩啊,
! \. c7 H, [; z+ r! d( q1 l3 f: g3 H. r9 t/ z# I. D* B
求一條RewriteRule的寫法:

  1. " O0 a9 U: e6 }& Z" R9 \
  2. Options +FollowSymLinks 5 X4 K4 g' S* g# o+ W7 i/ k) J
  3. RewriteEngine On
    * @3 U1 o: {6 T$ c) a' b* ~
  4. RewriteRule ^(.*).html$ $1.php [L]
    6 i7 k3 ~' i" V# r5 [
  5. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]   # v6 N. A3 u& r% i
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
  1. 1 t: E8 H* ]  e  A- C
  2. RewriteRule ^(.*)/(.*)$ product-details.php?id=$1 [QSA]9 ~4 p" M% I4 S. o. {% q
複製代碼
輸出Url:
  1. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
求助:要怎麼寫才能讓Url把」product id「也省了啊,讓它直接輸出
  1. http://www.mydomain.com/tao-of-badass.html
複製代碼

8 {& [" J2 G: O0 W2 ^) h* \
發表於 2014-1-20 14:28:33 | 顯示全部樓層
ID 貌似不能去啊 去了 apache或者NGINX就不知道具體是什麼網址了
; t: v. J" \7 S
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 14:57:10 | 顯示全部樓層
ID不能去掉,可以移動到文件名後面
  q7 L' s3 J8 C
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:01:36 | 顯示全部樓層
看你的程序是否支持通過文件名獲取文章( |" ?6 ?9 D( ~- h& _) x

( C  H3 Z  x: D7 L
* ~' X3 ^  {" S) Q. c

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-20 15:13:33 | 顯示全部樓層
多謝各位!: B( L8 d  x, W, T( J% E+ U8 C: p! I
! R( F6 [* t& _
回2#、3#,我覺得肯定是可以去掉id#的,像WP一樣去掉page id(article id),直接輸出如
http://mydomain.com/article-name.html
這樣的url的啊' y3 t# N  k; L2 S& A6 J( i2 V5 z' [

0 l6 g/ _0 c% J" n( W* J回4#,程序肯定是支持的,因為我看到別人的使用同一程序的網站就是把id#去掉的url,只是不知道人家的RewriteRule怎麼寫啊 " Z1 @' ^9 b# @# {5 f
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-20 15:22:15 | 顯示全部樓層
應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly url設置
0 d: z! {: `5 p6 v3 \: x! z

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-23 14:37:56 | 顯示全部樓層
咚咚來了 發表於 2014-1-20 15:22
- X  O2 W1 n( s- s應該不是apache rewrite單獨完成的,還需要你用的程序的url route配合。仔細看看你的程序有沒有friendly ur ...

( C  U. m/ m; h1 W7 e% p* H# M, d! X* @+ V
多謝!: R+ b0 [8 E9 k/ N

" l9 c  P" }  h" x8 w) R" l程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  7 a- \% u8 ~9 m- G

( S# c* l8 p  ?5 u) X
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 13:16:24 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 13:18 編輯 + r& D% }* H# F
amnoob 發表於 2014-1-23 14:37 7 F8 l9 T- D+ B. X  n* Y8 g
多謝!1 f0 T2 B  i* z! h6 z* e! P
( r8 K- x, F( ~3 W
程序後台沒找到可以設置URL的地方。不過我買的程序是盜版的,難道是這個原因,功能有刪減.  :di ...

6 d7 ]. p7 |! e不清楚你用的什麼程序。
- {! f$ x( x2 x. c/ Z, x. c5 ~( 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的。' W  |8 [8 y, _/ q6 y

4 g0 ~8 g3 J6 l" n但是apache只能做到這一步。剩下的就是你的程序根據請求的功能和附帶參數去處理。例如這個例子就是調用product-details相關功能,去數據庫取產品id為1392的數據,處理後返回給瀏覽器。
9 F. R3 L& Q9 Y7 {
$ w! v; a: C( u* N因此,你想省略id,必須需要你的程序支持。例如,wordpress就支持。wordpress就可以設置省略post id,但是需要提供slug,就是post name, 類似於你舉例中的「tao-of-badass」
' C# K/ o" j0 P6 C
% V$ p- p, _( W
- e2 O' y$ G! v  [2 u. Q# w6 I- u$ g" W% @8 P+ I; \" E

) ^$ z" u( R$ |0 T6 P! }  _* D4 i0 F+ `& N4 {: ~* G
& T5 l# i0 Q/ S9 ^% c; G2 ?5 t# [

! F0 b0 X; f# t' f0 Y& M

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2014-1-24 15:14:15 | 顯示全部樓層
咚咚來了 發表於 2014-1-24 13:16 ' P- A  U' c2 ]; x) u; q3 L0 U
不清楚你用的什麼程序。
% h. `# S4 d# Z1 ^7 E
- Y- ^$ j% V6 g* |不過web程序都一個道理。 apache rewrite只是簡單地映射, 就比如你主樓帖子寫的 ...

2 W4 ~7 b- y$ h6 W( G非常感謝!
& ?+ t' J: E. s/ W, K. J2 U7 Q& X( {/ V' d4 M
我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人家的站,同名的產品時它會自動在url中加上"-1"/"-2"/"-3"這樣(比如我舉的例子「tao-of-badass.html」, "tao-of-badass-2.html");這個肯定是通過php實現的吧?
2 x+ W+ g. a' d# [! {7 P# }$ j! ^: K
; V' d4 @: m+ {$ s' s看樣子我只能放棄這個省略id的想法了。
3 d1 \6 w. V. O- a" r
& e" M( [- e6 T再請教一下兄台哦:
$ w' M0 u& o' s$ m6 T' {7 K) _: N; k$ r. P) J
我現在好多頁面都被google重複收錄了兩次,因為我自己站內url是用

  1. ' H: N% Y$ c- T. U) _; D& f
  2. RewriteRule ^([0-9]+)/(.*)$ product-details.php?id=$1 [QSA]% U4 X) C( t' ?6 t
複製代碼

  1. 7 O( m/ k' i7 Z6 K+ p1 y% o3 |
  2. "http://www.mydomain.com/1392/任何url可識別的規範化字符"如我例子中的"http://www.mydomain.com/1392/tao-of-badass.html"
複製代碼
這樣的格式;
3 C5 [& U& k8 G' ]# G, g. t+ }4 @+ g% `
外鏈站因為是rss訂閱的,用的是程序的原始url即

  1. / h. P* R& R# p. g3 |
  2. http://www.mydomain.com/product-details.php?id=1392
    3 P0 w1 [$ o. t3 O  {
複製代碼
這樣的格式.
# u; Y+ r& W2 l# Q( ?/ @# d# ~, V& B* `) V7 H' K" W
現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」3 Y4 y9 u! ~2 P# H% k3 G

2 b- l2 n9 [9 D8 [/ f這個RewrtieRule應該怎麼寫呢?7 s- \& H) W+ \2 m3 o8 ~

7 d( d! ?' Z/ ~7 g' {: M+ y( M我想當然地以為是
  1. : o% M7 e$ K: H' L0 T4 i, c3 g
  2. RewriteRule ^product-details.php?id=([0-9]+)$ ([0-9]+)/$1
    . C: ^4 z2 Y. c" G1 z, M+ w
複製代碼
結果不行啊. ' C% W9 I, p8 d- d% i( {; Z5 a
: n, ~4 ]6 i+ S& k

; m, M$ o; G& ~4 z, m8 y- G
回復 给力 爆菊

使用道具 舉報

發表於 2014-1-24 19:08:25 | 顯示全部樓層
本帖最後由 咚咚來了 於 2014-1-24 19:13 編輯 8 A2 ~% u9 B0 t2 G4 d9 [. K
amnoob 發表於 2014-1-24 15:14
' t9 ~' o9 W7 a8 u/ {非常感謝!) z" {' ?1 y, ]& z7 _& x
; s- {# S  q5 L, X8 x9 J! D
我看了一下,我的product name不具有唯一性,只有product id才具有唯一性,再對比同程序的人 ...

' t/ ^4 u3 M( ~% i' c, W1. 第一個問題
6 V- Z' V( V) e. J' ]( [7 K7 d你舉例說的別人的網站,有可能後面那個就是id, 這也是很常見的一種做法,特別是中文cms,因為中文的cms多數都不支持slug。3 p' D* d7 O% Y& E2 Q* W
yousite.com/tao-of-badass-1392.html rewrite到 product-details.php?id=1392 可以做到,也就是把
5 }+ b3 |( t2 n  J' r- X形如yousite.com/product_name-product_id.html rewrite到 product-details.php?id=product_id; G3 \( P% g) [3 h
只需一條:
  1. Options +FollowSymLinks # D# R- P9 \( f4 `* I6 ~
  2. RewriteEngine On
    & Q& o6 F8 C: S9 P
  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,更不用說通過瀏覽器訪問了。
! d2 C' l  O0 e6 V
$ r* R. P' u6 J
1 h! f( p) G5 Q2. 第二個問題
  1. URL形式 A:* {, K0 Q# e# G) S$ w
  2. http://www.mydomain.com/product-details.php?id=1392
複製代碼
  1. URL形式 B:' D  t8 e' r0 ]* K/ m% x1 T
  2. http://www.mydomain.com/1392/tao-of-badass.html
複製代碼
首先確定你的這個1392到底什麼,以下假設是product id,否則如果是其他的,例如分類id,那就很不一樣了。
) ?' h2 d: V( \
. }. w, o/ `1 P如果想從B rewrite到A很容易,因為形式A就需要一個id,B的1392可以傳過去。 但是要反過來,想把A rewrite到B,也就是你說的:3 d: X% Y1 Z  P
現在想通過301告訴google,「product-details.php?id=1392」的實際url其實是「1392/xxxxxxxx.xxx(比如1392/tao-of-badass.html)」

  Y! f0 k9 q/ u7 x. g6 V可能就不行了(我覺得不行,其他兄弟有沒有會的?)。因為對於不同的id,B後面的xxxx.html中的xxxx從哪裡來呢?得不到。而且「product-details.php?id=1392」 這種形式的URL是你最終程序route處理的url,你把它rewrite到某種形式,肯定還得rewrite回來,在兜圈子。
& ?% w$ T" Z% d" k5 O; ^3 l) B# T" A4 {
! m; d, f. S; K+ b) Y% ~5 k# W如果要處理你現在的重複收錄,我能想到的兩種方式,一種就是讓收錄的url都定向到原始url,也就是「product-details.php?id=1392」 這種形式。這種方案,只需要把已經收錄的B 301定向到A。0 v7 }* `2 }5 V

5 r% r* s8 x8 J  F4 [" k另一種就是需要改一下你用的程序的前台模板(甚至可能需要改一下程序),就是使用canonical標籤。以wordpress為例,wordpress原始url是這樣的:
  1. http://www.yoursite.com/?p=postid+ o- {1 z$ M+ i2 `5 o% ^, n" [  d
  2. - o- ~8 y) T& T/ F
  3. http://www.yoursite.com/?p=1392
複製代碼
wordpress設置「friendly URL」之後,可以變成這樣:
  1. http://www.yoursite.com/post-name* H, n$ i' ]( i6 W6 }! U

  2. $ s2 d6 H( c/ U+ d
  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">
    ) F2 _  a$ A- X/ }+ E& U
  2. <link rel="shortlink" href="http://www.yoursite.com/?p=postid">
複製代碼
這樣Google就知道,兩個url是同一個頁面,並且以http://www.yoursite.com/post-name為主。: [9 ]* v0 _2 U+ j. ^
注意我上面canonical標籤裡的post-name、postid只是舉例說明,不是通用寫法,每個id對應的單頁,id和name都不一樣,需要修改模板,調用你程序提供的訪問這兩種url的函數來寫)
; r# s9 [3 E/ z+ q2 p% h# }! \# n+ y' @. D% x( A& }

. r2 K+ z0 H( i/ B

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

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

By DZ X3.5

小黑屋

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