52AV手機A片王|52AV.ONE
標題:
[SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
[打印本頁]
作者:
IT_man
時間:
2014-12-23 17:59
標題:
[SEO] ReWrite 設定讓 URL 動態樣式變靜態樣式(長變短)
本帖最後由 IT_man 於 2014-12-24 18:42 編輯
6 ~ G' x8 q, ]4 r9 c
4 Z% \+ X- G9 |: r9 h9 L) q, z
【前言】
由於敝網站的需要,主要是為了SEO(search engine optimize) in discuz x3.2 的後台->全局->SEO設置->URL靜態化(
設定教學
),google了一些資料,如下:
& C) s6 s7 C# Z( b
【介紹】
6 J( L( U9 D0 ]$ o
URL Rewrite(URL重導向)是一種REST (
Representational State Transfer
,表徵狀態轉移)的相關技術,它可以在 Web Server 中,針對使用者所提供的 URL 進行轉換後,再傳入 Web Server 中的程式處理器。
/ k" j# y: `% B/ u% Y
使用者可以使用較直覺的方式來輸入 URL(這也是 REST 的主要目的),是搜尋引擎最佳化(SEO)的作法之一。而應用程式開發者可以利用這個機制來將參數隱藏起來,可避免讓網路上的惡意使用者收集到有利於發動攻擊的資訊。
( |' I* _! [' o) W; f, ?
【整理】
. n F4 b2 ?- O! ]0 W
使用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。
$ \6 u$ [6 d* d' p3 K) @4 O
ReWrite是以正規表示式來表達,關於正規表示式的語法請參考。
4 b9 b; G, q% r- U& B& n
使用 ReWrite 的好處有二:
6 r3 Y1 @* ^0 Z" N
I.
讓 URL 看起來比較短,不帶參數的 '靜態URL' 形式對使用者來說比較習慣;
. J6 L. g0 z: D# f! w6 f# m" k1 l
II.
有利於 SEO,搜尋引擎比較好抓。
. [) C( e( P, F9 x3 X1 P( Z& O
【Rewrite語法】
" T7 F- X$ J& p
先以例子1說明:
RewriteEngine on
6 y% K$ R1 t! F( J+ @
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
$ m: H, J3 j/ D6 ~" v3 a* x9 }
RewriteRule index.php index.m.php
6 P" [! `: U c' q, c; e" g
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
: M' {8 v# v8 D/ B2 }
RewriteRule index.php index.L.php
3 G4 H- N { l
RewriteRule index.php index.b.php
U0 A, V# @) y4 |8 E$ c# U2 w
複製代碼
語意等同於:
: G" k/ S1 e* G0 e' e
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器
. @$ T8 ]% i& y) ~" t* l
{
/ @7 u4 d$ s3 b# J5 m' k9 L
//轉向到index.m.php
/ b* C* B+ k8 L d" m7 J1 ^6 i
}
( s( W$ @" Q! p) s
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器
5 J& u$ {9 F" R- R! g8 ]
{
: k! v9 N9 _3 v( k: f/ A& i
//轉向到index.L.php
9 s; F- @" @9 S' H' `
}
) k) h( H8 D* e& |! q+ S- {$ Z
else //其他版本的瀏覽器
( A6 ~; G( }7 B. X& x: C
//轉向到index.b.php
複製代碼
例子2.
' w4 I+ C' N8 Q7 j9 L$ W
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
% \! b `4 j$ d1 ]) F) z
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
: }& r- o. C. p* D
RewriteCond %{REMOTE_HOST} ^host3.*
! C' G6 R, B& j5 W, J8 H5 S2 N
RewriteRule (.*)$ test.php
複製代碼
如果地址是host1或host2或host3的時候,就轉跳到對test.php。
' O4 ^- `* i5 R. `( }
從這裡可以看出,RewriteCond語句之間內定邏輯是AND,如果想要OR,則要明確的寫出來。
{5 [# C( k" H/ c
以下介紹ReWrite語法:
& M Q y0 \$ c$ ^* C0 K. G
RewriteCond TestString CondPattern [Flags]
: t9 E) t% I3 ]3 [& T- `
TestString
是指一個URL格式的條件,例子中用的是環境變數名稱HTTP_HOST所包含的內容(Name= Value),這是一個map(鍵值對)格式的資料類型。
1 v. N H z8 T& x, _
CondPattern
是條件參數,以第二個例子為例,就是
host1.*
。
6 C6 ^+ l! U9 X3 X, V7 @
Flags
標識是第三個參數,可以用來緊跟下一個條件,這兒用OR表示或者,如果沒有[Flags],則用隱含的AND,表示
「
並且
」。
( {' C6 g/ D3 i/ J( u2 c" y
其它的還可以
「
NC
」等等,表示忽略大小寫
,
RewriteCond就像我們程式中的if語句一樣,表示如果符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能
。
0 {* D {) Q( }
7 z" V! C5 `) y. M# k2 ~" ?& ?$ a
Flags 還有更多用法:
7 }/ ^! U7 X$ X2 e
I (ignore case)不管大小寫強行指定字串匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令
% a% R% ~' a+ Z9 k, w
F (Forbidden) 對客戶端做反應,停止REWRITING程序並且送出403錯誤,注意在這種情況下FORMATSTRING 是無用的並可以設置為任何非空字串。
7 C0 y, s" o3 j: |* x! }! A
L (last rule) 不應用任何重寫規則
,
在此停止重寫程序,使用這個FLAG以阻止當前被重寫的URI被後面的規則再次重寫
* H2 I$ ]; _) T9 D9 W
N (Next iteration) 強制REWRITINGENGINE調整規則目標並且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略
) Q' `0 U) U/ w2 V8 B$ d( A
NS (Next iteration of the same rule) 以N標記工作不從相同的規則重啟規則程序(例如強制重複規則應用),透過RepeatLimit指令指定一個反複執行某一規則的最大數目,
" E" q5 ^8 X5 v- E7 ~6 i* k- X
P (force proxy) 強制目的URI在內部強制為代理需求並且立即透過ISAPI擴展應付代理需求,必須確認代理字串是一個有效的URI包括協議主機等等否則代理將返回錯誤
) k: G4 w6 Q( o) e8 e5 B; K
R (explicit redirect)強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最後規則
6 d4 s) R( J4 c# z" O/ k
RP (permanent redirect) 幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼
/ X1 ^ }- @0 `* q$ Y) G! M
U (Unmangle Log) 當URI是來源需求而不是重寫需求時記載URI
% S. G" S7 ]2 n) N2 [6 T3 F
O (nOrmalize) 在實行之前標準化字串。標準化包括URL-ENCODING,不合法的字串的再移動等,這個標記對於URLS和URLS-ENDODED頭是有用的
5 ?6 G8 h2 |7 F. p& X
CL (Case Lower) 小寫
2 d9 }$ p& ^; d0 R
CU (Case Upper) 大寫
. f' T. p5 m* g% C7 x
重點來了,要如何設定才能實現上述的功能,以下是我的例子(.htaccess 及 apache的httpd.conf皆適用正規表示式):
/ W, Q9 L( j1 a
.htaccess
此檔放於網站的根目錄
# -FrontPage-
% v4 n" T; m( K* w' m2 x
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
5 R7 Q% {7 P6 f* S% c
# disable directory browsing
& Y' m* D3 t2 O3 k
Options All -Indexes
" g: h( @. z3 I6 U
RewriteEngine On # 將 RewriteEngine 模式打開
1 g/ A0 M0 ?; b3 _3 @) a' {
RewriteBase / #設定為網站的根目錄
$ U, F$ s O( a0 W" F/ R
#
" H/ X6 a* j7 { {. K- z8 X9 P
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
$ D) Y5 g- q: \. a
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
. m& l0 u+ |/ M0 `
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
" X( k/ {+ _0 q3 S9 p2 T3 u
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
3 U% ` Z* _# v" X; [, i
複製代碼
( b! F; _6 E( Z1 l
Apache之httpd.conf 打開 /etc/httpd/conf/httpd.conf並加入你的網站目錄段如下:
<Directory "/www/coav4u/test">
* U2 T7 X" |* E; q( n
RewriteEngine On # 將 RewriteEngine 模式打開
( c% M% ]; ?: s* Q3 l0 B1 b
RewriteBase / #設定為網站的根目錄
. O; X D2 d9 E0 t6 _ f) h
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
9 B9 O$ ^# j7 ?* E6 u5 w/ ]" S7 \$ P
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
( l J. k; x% R5 X9 `7 J6 ` T X
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
5 U0 X. L7 C: l# i4 e4 M
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
: H) P) D9 M. H0 B
Options Includes FollowSymLinks
& I: s4 r* A' J: N
AllowOverride All
1 T+ C% e6 j# V7 [; `0 n W( a
Allow from all
4 B# A8 o# G1 S5 ]# w+ y0 p
Order allow,deny
0 [. R# N3 q& A+ t2 j! S% p7 P% l$ y2 T
addDefaultCharset UTF-8
. e8 t9 @" z7 r
</Directory>
2 a( t" P, d1 E
複製代碼
存檔後記得重啟httpd : service httpd restart 才會生效
{0 S4 m( K+ }9 v7 ^, L
歡迎光臨 52AV手機A片王|52AV.ONE (https://nhkie.com/)
Powered by Discuz! X3.2