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

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

作者: IT_man    時間: 2014-12-23 17:59
標題: [SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
本帖最後由 IT_man 於 2014-12-24 18:42 編輯 . p' p$ e# W% f9 @4 n9 o
. ~8 q! n5 u" D0 @0 Z/ P1 f8 E
【前言】由於敝網站的需要,主要是為了SEO(search engine optimize) in discuz x3.2 的後台->全局->SEO設置->URL靜態化(設定教學),google了一些資料,如下:
$ L0 q3 N0 J! A# d  f) J* K【介紹】
( X* y! [; [3 D* t8 n4 h
URL Rewrite(URL重導向)是一種REST (Representational State Transfer,表徵狀態轉移)的相關技術,它可以在 Web Server 中,針對使用者所提供的 URL 進行轉換後,再傳入 Web Server 中的程式處理器。
0 }* U7 q: K+ z" M" j使用者可以使用較直覺的方式來輸入 URL(這也是 REST 的主要目的),是搜尋引擎最佳化(SEO)的作法之一。而應用程式開發者可以利用這個機制來將參數隱藏起來,可避免讓網路上的惡意使用者收集到有利於發動攻擊的資訊。
9 u8 H+ o% M' F1 t5 ^; a$ }6 o
【整理】4 H5 J$ t+ I1 c* ^2 l
使用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。
/ {3 I6 A  d6 J: L* ^0 N) ?ReWrite是以正規表示式來表達,關於正規表示式的語法請參考。
; ^: L& `) q" L+ \7 q使用 ReWrite 的好處有二:

9 M8 x  B8 g( r" O# @I.讓 URL 看起來比較短,不帶參數的 '靜態URL' 形式對使用者來說比較習慣;
# \9 E. H" U7 m$ k3 S& ]II.有利於 SEO,搜尋引擎比較好抓。
( U6 v/ Q* P( h' ]1 P【Rewrite語法】4 e3 @* _8 J/ ~
先以例子1說明:
  1. RewriteEngine on
    " a; j$ ]+ X0 I4 H0 q* c" m
  2. RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
    0 ]6 C! t$ @. E, V* V! j# J8 C
  3. RewriteRule index.php index.m.php/ E) _# T+ f* |8 d. M6 c) v6 z0 q* [9 G
  4. RewriteCond %{HTTP_USER_AGENT} ^Lynx.*; W4 h- d8 V" j4 D* }
  5. RewriteRule index.php index.L.php5 s" G" ]) B/ b: |
  6. RewriteRule index.php index.b.php
    8 A8 O9 a: ~# e4 _& i& R% `
複製代碼
語意等同於:: ]0 X: g8 Q7 B( ^* I  G
  1. if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器
    ! t; W6 [) O( N+ S& T$ v
  2. {* m& v3 Y9 P# ]2 c6 [
  3. //轉向到index.m.php* R! n' Y3 w7 T$ A
  4. }
    . H: s) w: [! d
  5. else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器
    ' `, t" W6 L% s! M( A
  6. {
    / H* g- C+ k  m, y7 t  ~) s* V
  7. //轉向到index.L.php
    / L4 P! m+ Q5 k" {
  8. }
    % }# R! e; L2 H9 ^3 k2 K
  9. else  //其他版本的瀏覽器  ]- ]* B4 ^, u3 R
  10. //轉向到index.b.php
複製代碼
例子2.. G2 i+ z9 U( ~8 S- P3 R" A
  1. RewriteCond %{REMOTE_HOST} ^host1.* [OR]. r/ s% z& W  Z% b0 |( `
  2. RewriteCond %{REMOTE_HOST} ^host2.* [OR]
    & c9 _6 l2 N' z0 G/ F8 y/ {0 ?
  3. RewriteCond %{REMOTE_HOST} ^host3.*
    " \" D; Z7 @. i3 d; q
  4. RewriteRule (.*)$ test.php
複製代碼
如果地址是host1或host2或host3的時候,就轉跳到對test.php。! N* G" i  ^% t8 F: l4 t* z% j
從這裡可以看出,RewriteCond語句之間內定邏輯是AND,如果想要OR,則要明確的寫出來。3 z( u8 l; A  w
以下介紹ReWrite語法:
7 D$ _4 A, e$ a; l
RewriteCond TestString CondPattern [Flags]# T7 q- c9 v' d" `+ v
TestString  是指一個URL格式的條件,例子中用的是環境變數名稱HTTP_HOST所包含的內容(Name= Value),這是一個map(鍵值對)格式的資料類型。1 i7 i9 w( Q% v- v2 W7 `
CondPattern 是條件參數,以第二個例子為例,就是
host1.*
9 P( s$ |- @6 w. m: FFlags       標識是第三個參數,可以用來緊跟下一個條件,這兒用OR表示或者,如果沒有[Flags],則用隱含的AND,表示
並且」。
3 B2 `8 s' p; @8 i5 c其它的還可以
NC」等等,表示忽略大小寫RewriteCond就像我們程式中的if語句一樣,表示如果符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能  B' V# b7 S2 V- q  S+ ^8 a

9 V- `" b/ z2 p2 W# S: L" \! MFlags 還有更多用法:
7 g* o+ U% j& [5 U# `$ q
I (ignore case)不管大小寫強行指定字串匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令# F& `" G" t9 q) _5 K+ V
F (Forbidden) 對客戶端做反應,停止REWRITING程序並且送出403錯誤,注意在這種情況下FORMATSTRING 是無用的並可以設置為任何非空字串。
' w1 L. o) }& E: ZL (last rule) 不應用任何重寫規則
在此停止重寫程序,使用這個FLAG以阻止當前被重寫的URI被後面的規則再次重寫8 Q0 ]9 w/ ?' D2 Q
N (Next iteration) 強制REWRITINGENGINE調整規則目標並且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略4 _# p  A6 `0 x$ `. B1 ?' k
NS (Next iteration of the same rule) 以N標記工作不從相同的規則重啟規則程序(例如強制重複規則應用),透過RepeatLimit指令指定一個反複執行某一規則的最大數目,
8 V  _( `9 R' KP (force proxy) 強制目的URI在內部強制為代理需求並且立即透過ISAPI擴展應付代理需求,必須確認代理字串是一個有效的URI包括協議主機等等否則代理將返回錯誤
% }, I* d" x9 zR (explicit redirect)強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最後規則
0 Y- C# a. v7 l& fRP (permanent redirect) 幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼8 l; V: {3 Y9 q# Y/ [* \8 i
U (Unmangle Log) 當URI是來源需求而不是重寫需求時記載URI
. Q' }9 M" e1 ^" g- k4 BO (nOrmalize) 在實行之前標準化字串。標準化包括URL-ENCODING,不合法的字串的再移動等,這個標記對於URLS和URLS-ENDODED頭是有用的
! ~' N: F/ W: M; h; f9 o" pCL (Case Lower) 小寫" L" _% O3 P& Y3 c0 d
CU (Case Upper) 大寫
$ \1 h. z' Y2 I$ \/ i
重點來了,要如何設定才能實現上述的功能,以下是我的例子(.htaccess 及 apache的httpd.conf皆適用正規表示式):& V+ C. A& }; `1 H: @





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