52AV手機A片王|52AV.ONE

標題: [SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短) [打印本頁]

作者: IT_man    時間: 2014-12-23 17:59
標題: [SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
本帖最後由 IT_man 於 2014-12-24 18:42 編輯 9 v8 \$ z1 d1 M. `9 x
+ @( L7 J; ]9 y; s; k% n
【前言】由於敝網站的需要,主要是為了SEO(search engine optimize) in discuz x3.2 的後台->全局->SEO設置->URL靜態化(設定教學),google了一些資料,如下:
# ]7 k  F2 H7 y3 z3 M$ \8 a【介紹】
, B) y7 s: q$ O5 M# q
URL Rewrite(URL重導向)是一種REST (Representational State Transfer,表徵狀態轉移)的相關技術,它可以在 Web Server 中,針對使用者所提供的 URL 進行轉換後,再傳入 Web Server 中的程式處理器。" E6 Q$ d9 L, }! D7 @2 O7 m
使用者可以使用較直覺的方式來輸入 URL(這也是 REST 的主要目的),是搜尋引擎最佳化(SEO)的作法之一。而應用程式開發者可以利用這個機制來將參數隱藏起來,可避免讓網路上的惡意使用者收集到有利於發動攻擊的資訊。/ ]+ f& I5 U  u, ~) O
【整理】$ V; L8 Y/ v3 J7 z
使用ReWrite 設定,很方便地可將原本是『
http://www.av4u.info/forum.php?mod=viewthread&tid=192&extra=page%3D1』樣式的動態URL,變成『http://www.av4u.info/thread-192-1-1.html』形式的 '靜態URL。
" W- r! \+ N% ?1 G& z+ ^ReWrite是以正規表示式來表達,關於正規表示式的語法請參考。2 N, b% D4 F6 V" f0 x
使用 ReWrite 的好處有二:
% s# U- a. t3 B8 V6 T5 R
I.讓 URL 看起來比較短,不帶參數的 '靜態URL' 形式對使用者來說比較習慣;5 E3 W. n  a& i- n  d# D
II.有利於 SEO,搜尋引擎比較好抓。
# @: p: i" N4 a* B# J【Rewrite語法】
8 i' q0 k1 [( z. G1 d先以例子1說明:
  1. RewriteEngine on
    $ x" J! b4 C, L, {
  2. RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
    & i: T5 Z+ T+ t! }3 p1 f5 R
  3. RewriteRule index.php index.m.php5 l* c7 H+ n! |
  4. RewriteCond %{HTTP_USER_AGENT} ^Lynx.*- e$ g+ [7 o& I7 q: J
  5. RewriteRule index.php index.L.php: B1 f% ~$ I, s
  6. RewriteRule index.php index.b.php
    * i( p0 r3 v% r1 G1 ^: H
複製代碼
語意等同於:
; G( B8 J! K2 Y) N# G; _
  1. if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器8 ~" f, i2 Q# S) |! p
  2. {
    ) K! ^( Y& C" T# Q1 ?0 _. P- K
  3. //轉向到index.m.php7 y* {7 H& x7 y9 \) V1 G4 B
  4. }  h# j0 x6 m& R3 y
  5. else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器$ [/ C( A( x# d$ B* J  `# F
  6. {/ z2 Y' u/ l+ W$ O
  7. //轉向到index.L.php4 M$ p+ ]* K- A/ h
  8. }
    8 H- R7 R9 [9 v" i
  9. else  //其他版本的瀏覽器" G( n/ R$ H( A8 y3 v* m1 X% ]
  10. //轉向到index.b.php
複製代碼
例子2.% B7 T3 P& L& a. H, J) J
  1. RewriteCond %{REMOTE_HOST} ^host1.* [OR]9 V: g# h+ L; B2 Z1 k
  2. RewriteCond %{REMOTE_HOST} ^host2.* [OR]2 @$ _1 V5 i; t; `6 i( b8 S8 |
  3. RewriteCond %{REMOTE_HOST} ^host3.*5 q0 s8 V) D- Q. l+ z/ ]+ s$ J& ~8 h
  4. RewriteRule (.*)$ test.php
複製代碼
如果地址是host1或host2或host3的時候,就轉跳到對test.php。0 F+ j2 \8 ~( H% ?
從這裡可以看出,RewriteCond語句之間內定邏輯是AND,如果想要OR,則要明確的寫出來。8 u" v! g. A) A( `" {' e# {3 ~
以下介紹ReWrite語法:
7 E; \; T, F" N9 \
RewriteCond TestString CondPattern [Flags]
7 s" i$ P! n( b* o) @0 ~TestString  是指一個URL格式的條件,例子中用的是環境變數名稱HTTP_HOST所包含的內容(Name= Value),這是一個map(鍵值對)格式的資料類型。
' t; R- p1 J8 N! W' KCondPattern 是條件參數,以第二個例子為例,就是
host1.*7 f/ E' ~4 m) X0 }
Flags       標識是第三個參數,可以用來緊跟下一個條件,這兒用OR表示或者,如果沒有[Flags],則用隱含的AND,表示
並且」。
5 q: `& ^1 G* e  s' b$ M& C& a其它的還可以
NC」等等,表示忽略大小寫RewriteCond就像我們程式中的if語句一樣,表示如果符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能
0 j5 [" v7 D4 f( H, w# v1 N

: _9 w+ ~) r4 Y/ W9 JFlags 還有更多用法:
" \5 E- p" K5 D+ X8 R
I (ignore case)不管大小寫強行指定字串匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令. m" A2 L- Y% ^9 s# V
F (Forbidden) 對客戶端做反應,停止REWRITING程序並且送出403錯誤,注意在這種情況下FORMATSTRING 是無用的並可以設置為任何非空字串。$ ?) l3 T0 F6 ]) M. X
L (last rule) 不應用任何重寫規則
在此停止重寫程序,使用這個FLAG以阻止當前被重寫的URI被後面的規則再次重寫
6 Y! t  ]% O& X. ^1 hN (Next iteration) 強制REWRITINGENGINE調整規則目標並且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略7 S. A% E7 _. }
NS (Next iteration of the same rule) 以N標記工作不從相同的規則重啟規則程序(例如強制重複規則應用),透過RepeatLimit指令指定一個反複執行某一規則的最大數目,6 N! w$ u$ K1 w  }3 S+ p
P (force proxy) 強制目的URI在內部強制為代理需求並且立即透過ISAPI擴展應付代理需求,必須確認代理字串是一個有效的URI包括協議主機等等否則代理將返回錯誤
: l: I" `- J, `, i' E+ JR (explicit redirect)強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最後規則3 t5 U7 @- s$ p
RP (permanent redirect) 幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼4 u# L4 G2 C4 B2 ]3 z  y! M) B5 i
U (Unmangle Log) 當URI是來源需求而不是重寫需求時記載URI
8 I. ?% v' J- W* @! q- @O (nOrmalize) 在實行之前標準化字串。標準化包括URL-ENCODING,不合法的字串的再移動等,這個標記對於URLS和URLS-ENDODED頭是有用的' F* l) N) y1 g" L9 s9 p  i' t7 Q
CL (Case Lower) 小寫
: S' l  m8 _) \2 A3 K7 ]2 eCU (Case Upper) 大寫

6 N3 m* c/ N# W! b; M" B重點來了,要如何設定才能實現上述的功能,以下是我的例子(.htaccess 及 apache的httpd.conf皆適用正規表示式):
+ N7 C1 ~/ T4 p/ Y




歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) Powered by Discuz! X3.2