52AV手機A片王|52AV.ONE
標題:
[SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
[打印本頁]
作者:
IT_man
時間:
2014-12-23 17:59
標題:
[SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
本帖最後由 IT_man 於 2014-12-24 18:42 編輯
# i' y! q* d( [, x8 W- ]; R
5 Y5 I4 J; W) W
【前言】
由於敝網站的需要,主要是為了SEO(search engine optimize) in discuz x3.2 的後台->全局->SEO設置->URL靜態化(
設定教學
),google了一些資料,如下:
& ?- X0 q! H" q: e
【介紹】
* y# v! m1 h! P5 h& O
URL Rewrite(URL重導向)是一種REST (
Representational State Transfer
,表徵狀態轉移)的相關技術,它可以在 Web Server 中,針對使用者所提供的 URL 進行轉換後,再傳入 Web Server 中的程式處理器。
$ _! U# W" R- g l5 Z$ ^. z
使用者可以使用較直覺的方式來輸入 URL(這也是 REST 的主要目的),是搜尋引擎最佳化(SEO)的作法之一。而應用程式開發者可以利用這個機制來將參數隱藏起來,可避免讓網路上的惡意使用者收集到有利於發動攻擊的資訊。
7 w' z/ E, ^- w% W) h0 d+ i! k+ K
【整理】
% n! }- t8 @8 K1 y# p
使用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。
& @8 u$ R- i& ] B7 |' a$ f9 F
ReWrite是以正規表示式來表達,關於正規表示式的語法請參考。
$ f. Z+ M4 c; P
使用 ReWrite 的好處有二:
5 l4 M4 } O2 g% C. S8 P
I.
讓 URL 看起來比較短,不帶參數的 '靜態URL' 形式對使用者來說比較習慣;
+ {, N2 Y! t' ?0 i, O& o
II.
有利於 SEO,搜尋引擎比較好抓。
# U2 n; r/ q' L3 s9 ]
【Rewrite語法】
) |1 W4 }7 z2 S: q" Y9 b9 G" d
先以例子1說明:
RewriteEngine on
) S" o8 l2 N* o. F- t( q! K
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
0 u, v- J2 Z- ^* }) ?/ \
RewriteRule index.php index.m.php
9 s' I/ P, ^7 Q0 v- u7 @# k
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
; O1 A1 ?+ d; o* i+ B; c$ Z: j! M
RewriteRule index.php index.L.php
$ Z, }0 i- ]0 b4 z/ ^
RewriteRule index.php index.b.php
' f# }9 A5 J$ Q' z) J7 s
複製代碼
語意等同於:
" g: g9 I1 n1 G7 O+ V
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器
4 W9 A# J0 E5 [3 U; n
{
; J) o/ w9 U0 s8 y
//轉向到index.m.php
7 j( e2 M+ Z% ^5 C
}
' k2 b# I% r/ ^4 f
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器
6 @- i0 o' [! O! I( l
{
/ y; _( K7 O1 q( V9 N
//轉向到index.L.php
- U$ ?1 v6 R& d( D: l0 [% \: V
}
$ {6 ]: `1 r; J( y- j) k
else //其他版本的瀏覽器
% o6 e9 A( b7 F. Z7 j2 N5 O- v9 f
//轉向到index.b.php
複製代碼
例子2.
( Q6 V8 C: Y* o0 t' P* q
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
/ e: S0 m' x4 k. c% _4 G2 v
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
/ w/ X8 ^0 d0 d$ I' _$ O6 u- P
RewriteCond %{REMOTE_HOST} ^host3.*
. J: v V7 c0 o7 g% h" z
RewriteRule (.*)$ test.php
複製代碼
如果地址是host1或host2或host3的時候,就轉跳到對test.php。
. y% j s2 t$ K* `
從這裡可以看出,RewriteCond語句之間內定邏輯是AND,如果想要OR,則要明確的寫出來。
' ~: A* n6 j6 V: D+ C
以下介紹ReWrite語法:
; I6 |7 n" B+ C+ V0 h( C
RewriteCond TestString CondPattern [Flags]
8 m- z% r% \7 x2 T
TestString
是指一個URL格式的條件,例子中用的是環境變數名稱HTTP_HOST所包含的內容(Name= Value),這是一個map(鍵值對)格式的資料類型。
8 L6 @4 F. x4 l" K: W
CondPattern
是條件參數,以第二個例子為例,就是
host1.*
。
5 Z6 P+ |3 W2 B6 ~: F5 f. O& C
Flags
標識是第三個參數,可以用來緊跟下一個條件,這兒用OR表示或者,如果沒有[Flags],則用隱含的AND,表示
「
並且
」。
- |0 u! o* T1 b8 d2 p% ?: h6 n) D
其它的還可以
「
NC
」等等,表示忽略大小寫
,
RewriteCond就像我們程式中的if語句一樣,表示如果符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能
。
% W2 @; Y0 m8 |" O+ o
1 y! d& F3 X1 Z, V5 c: o
Flags 還有更多用法:
8 A9 M) m! p" W! x5 u$ o. p+ U
I (ignore case)不管大小寫強行指定字串匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令
- O# o+ j% {& p) v4 @' l* v: U
F (Forbidden) 對客戶端做反應,停止REWRITING程序並且送出403錯誤,注意在這種情況下FORMATSTRING 是無用的並可以設置為任何非空字串。
u+ Q6 f- K/ o: _# y8 Y
L (last rule) 不應用任何重寫規則
,
在此停止重寫程序,使用這個FLAG以阻止當前被重寫的URI被後面的規則再次重寫
4 g) _; O9 O& r
N (Next iteration) 強制REWRITINGENGINE調整規則目標並且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略
, O- Q7 K6 A& M
NS (Next iteration of the same rule) 以N標記工作不從相同的規則重啟規則程序(例如強制重複規則應用),透過RepeatLimit指令指定一個反複執行某一規則的最大數目,
3 ]0 Q" Z' F4 g; K8 @% K+ S
P (force proxy) 強制目的URI在內部強制為代理需求並且立即透過ISAPI擴展應付代理需求,必須確認代理字串是一個有效的URI包括協議主機等等否則代理將返回錯誤
' P7 `; u7 [4 F0 y: Q
R (explicit redirect)強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最後規則
: h# ]# c3 J. N- m
RP (permanent redirect) 幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼
; T, u: N/ B0 b- q$ b
U (Unmangle Log) 當URI是來源需求而不是重寫需求時記載URI
/ t m1 ~) U. b `0 ]
O (nOrmalize) 在實行之前標準化字串。標準化包括URL-ENCODING,不合法的字串的再移動等,這個標記對於URLS和URLS-ENDODED頭是有用的
$ X* V; K3 [# X) U; h- C9 C
CL (Case Lower) 小寫
) K3 X$ y% [/ x- Y' y( f! j/ D7 c
CU (Case Upper) 大寫
- Z& z2 w: Z! k! G
重點來了,要如何設定才能實現上述的功能,以下是我的例子(.htaccess 及 apache的httpd.conf皆適用正規表示式):
# C) P6 Q- x" L: ]* D& i
.htaccess
此檔放於網站的根目錄
# -FrontPage-
8 U! c3 I' v* ?3 n' s+ f
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
' x1 L) }5 k# j7 s3 ?
# disable directory browsing
7 z& e$ _" o$ `% B
Options All -Indexes
% _. S% ?# Z3 G1 x7 g8 V
RewriteEngine On # 將 RewriteEngine 模式打開
& V4 ~. v' m* F ?& O
RewriteBase / #設定為網站的根目錄
; M' M. a: k) G0 M7 u" M: R
#
6 @; \1 s* j- w# ]
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
) `) V2 b+ F) o1 e3 G
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
$ h! D/ ]7 C2 C0 T
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
# V* W5 m7 G9 g7 d
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
' a e' ]5 k/ @
複製代碼
; p ^- }. e; |; d, ^/ I7 f; I( V
Apache之httpd.conf 打開 /etc/httpd/conf/httpd.conf並加入你的網站目錄段如下:
<Directory "/www/coav4u/test">
1 I' t4 I6 l ^+ p$ e
RewriteEngine On # 將 RewriteEngine 模式打開
3 Q; s" p3 N: w5 Q8 F
RewriteBase / #設定為網站的根目錄
: P! d* P: _2 ?4 q* e7 ~# V; _
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
! r9 f0 N% i- i/ R$ r% _
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
/ | m7 v8 E3 N
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
7 V5 x. S6 n/ V, `7 R* k- ]7 E c
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
: ^9 H5 L% N2 A* u9 C
Options Includes FollowSymLinks
0 a ]8 @3 y+ `" l% q3 L; M2 `
AllowOverride All
3 ]0 X; Z7 E* \* l* j5 r
Allow from all
. f$ I/ W" D( w
Order allow,deny
+ {$ y! E* A' _& P7 J' J3 G0 @2 t4 {
addDefaultCharset UTF-8
% n/ L2 C5 n* n$ b6 x- {5 w
</Directory>
+ @+ L- I$ Z# X6 Y
複製代碼
存檔後記得重啟httpd : service httpd restart 才會生效
& f; [6 F9 [' L2 {4 f/ ]) I
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/)
Powered by Discuz! X3.2