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說明:
RewriteEngine on
" a; j$ ]+ X0 I4 H0 q* c" m
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
0 ]6 C! t$ @. E, V* V! j# J8 C
RewriteRule index.php index.m.php
/ E) _# T+ f* |8 d. M6 c) v6 z0 q* [9 G
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
; W4 h- d8 V" j4 D* }
RewriteRule index.php index.L.php
5 s" G" ]) B/ b: |
RewriteRule index.php index.b.php
8 A8 O9 a: ~# e4 _& i& R% `
複製代碼
語意等同於:
: ]0 X: g8 Q7 B( ^* I G
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器
! t; W6 [) O( N+ S& T$ v
{
* m& v3 Y9 P# ]2 c6 [
//轉向到index.m.php
* R! n' Y3 w7 T$ A
}
. H: s) w: [! d
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器
' `, t" W6 L% s! M( A
{
/ H* g- C+ k m, y7 t ~) s* V
//轉向到index.L.php
/ L4 P! m+ Q5 k" {
}
% }# R! e; L2 H9 ^3 k2 K
else //其他版本的瀏覽器
]- ]* B4 ^, u3 R
//轉向到index.b.php
複製代碼
例子2.
. G2 i+ z9 U( ~8 S- P3 R" A
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
. r/ s% z& W Z% b0 |( `
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
& c9 _6 l2 N' z0 G/ F8 y/ {0 ?
RewriteCond %{REMOTE_HOST} ^host3.*
" \" D; Z7 @. i3 d; q
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: F
Flags
標識是第三個參數,可以用來緊跟下一個條件,這兒用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" \! M
Flags 還有更多用法:
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: Z
L (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' K
P (force proxy) 強制目的URI在內部強制為代理需求並且立即透過ISAPI擴展應付代理需求,必須確認代理字串是一個有效的URI包括協議主機等等否則代理將返回錯誤
% }, I* d" x9 z
R (explicit redirect)強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最後規則
0 Y- C# a. v7 l& f
RP (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 B
O (nOrmalize) 在實行之前標準化字串。標準化包括URL-ENCODING,不合法的字串的再移動等,這個標記對於URLS和URLS-ENDODED頭是有用的
! ~' N: F/ W: M; h; f9 o" p
CL (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: @
.htaccess
此檔放於網站的根目錄
# -FrontPage-
/ X8 A6 l, h- k2 q8 b% o
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
7 s* Y( ^5 y, r+ {- o" h, F
# disable directory browsing
3 E& x7 C5 t- L7 D8 L& l
Options All -Indexes
; s ]1 s) ^2 O* b! U/ Y: _7 T1 I
RewriteEngine On # 將 RewriteEngine 模式打開
0 w3 z' o& H' n2 R1 H U
RewriteBase / #設定為網站的根目錄
$ L+ _9 c2 X0 ?8 F9 ^* l) s- f
#
' j+ K& W7 y' v& E% F. ~' E+ x) u
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
0 e" J+ p. d, x, T4 F
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
6 R' O* T7 Q# Y, \9 y# j
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
' C/ u* B; [: a* p' c6 |6 K! r
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
$ a! Q+ f$ \6 y
複製代碼
" X' C) _4 {& K) ]6 y- k
Apache之httpd.conf 打開 /etc/httpd/conf/httpd.conf並加入你的網站目錄段如下:
<Directory "/www/coav4u/test">
# b; i/ h/ ^: a/ U$ z; B
RewriteEngine On # 將 RewriteEngine 模式打開
I% G2 \. B, u# y; {
RewriteBase / #設定為網站的根目錄
5 W! b+ j/ g- A" W; r2 N
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
7 I! Q {% E1 z. H1 V' _, ?
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
" g! F( P5 B* [( F
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
/ |1 w5 O* H6 l; \- f7 S5 _
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
. H3 h8 K% x$ |/ R; F
Options Includes FollowSymLinks
4 e: d) D: p$ f1 s
AllowOverride All
9 |% ]. Q9 k/ U1 v' s4 M( d
Allow from all
. m; p' }/ ~- H# Z( q- T" r2 T
Order allow,deny
+ z2 U3 N' T0 `7 u$ g
addDefaultCharset UTF-8
3 ?/ r2 Q2 w: h$ K, {
</Directory>
! M9 k( K" m2 n& _! p) F
複製代碼
存檔後記得重啟httpd : service httpd restart 才會生效
1 _! f' ~& v% H* ?( j
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/)
Powered by Discuz! X3.2