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說明:
RewriteEngine on
$ x" J! b4 C, L, {
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
& i: T5 Z+ T+ t! }3 p1 f5 R
RewriteRule index.php index.m.php
5 l* c7 H+ n! |
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
- e$ g+ [7 o& I7 q: J
RewriteRule index.php index.L.php
: B1 f% ~$ I, s
RewriteRule index.php index.b.php
* i( p0 r3 v% r1 G1 ^: H
複製代碼
語意等同於:
; G( B8 J! K2 Y) N# G; _
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0′) //FireFox瀏覽器
8 ~" f, i2 Q# S) |! p
{
) K! ^( Y& C" T# Q1 ?0 _. P- K
//轉向到index.m.php
7 y* {7 H& x7 y9 \) V1 G4 B
}
h# j0 x6 m& R3 y
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') //移動設備的瀏覽器
$ [/ C( A( x# d$ B* J `# F
{
/ z2 Y' u/ l+ W$ O
//轉向到index.L.php
4 M$ p+ ]* K- A/ h
}
8 H- R7 R9 [9 v" i
else //其他版本的瀏覽器
" G( n/ R$ H( A8 y3 v* m1 X% ]
//轉向到index.b.php
複製代碼
例子2.
% B7 T3 P& L& a. H, J) J
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
9 V: g# h+ L; B2 Z1 k
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
2 @$ _1 V5 i; t; `6 i( b8 S8 |
RewriteCond %{REMOTE_HOST} ^host3.*
5 q0 s8 V) D- Q. l+ z/ ]+ s$ J& ~8 h
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' K
CondPattern
是條件參數,以第二個例子為例,就是
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 J
Flags 還有更多用法:
" \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 h
N (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+ J
R (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 e
CU (Case Upper) 大寫
6 N3 m* c/ N# W! b; M" B
重點來了,要如何設定才能實現上述的功能,以下是我的例子(.htaccess 及 apache的httpd.conf皆適用正規表示式):
+ N7 C1 ~/ T4 p/ Y
.htaccess
此檔放於網站的根目錄
# -FrontPage-
$ k9 a' z, d& I( u/ ^, ]
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
0 N; U# I' y9 d ?. o* [8 [2 |/ C: y
# disable directory browsing
* I+ ~& R+ o- q& w) a- U) U! }3 R( Z
Options All -Indexes
5 ^4 s# H1 Z8 } H0 J
RewriteEngine On # 將 RewriteEngine 模式打開
, y* j& W4 v7 S7 f9 A4 ?
RewriteBase / #設定為網站的根目錄
5 @# M' ~4 t8 K; n1 A t
#
; f9 r; R F6 u+ W% l
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
( h9 f# }9 c6 f- c
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
) J5 [. J) `3 `! r' Q* C0 A, {9 h
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
: i7 T& i7 E, t4 m% X `
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
- @7 A( j5 e! ^, I$ J$ g
複製代碼
- E( @6 ~1 Y; y2 n9 S9 r$ |( B
Apache之httpd.conf 打開 /etc/httpd/conf/httpd.conf並加入你的網站目錄段如下:
<Directory "/www/coav4u/test">
8 z- ^7 @9 V) C7 z/ N
RewriteEngine On # 將 RewriteEngine 模式打開
* a( w( m( l6 v: D* T" B S
RewriteBase / #設定為網站的根目錄
3 ~0 W/ J/ G: \) B# A5 g
RewriteCond %{HTTP_HOST} ^av4u.info [NC]
0 x' J3 F# X# S4 r! r" u
RewriteRule ^(.*)$ HTTP://www.av4u.info/$1 [L]
6 b! w+ f8 I8 T9 m' J* O
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
5 ]; Y' }/ w8 X) B" `7 D. W0 {
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
a" o6 p9 f1 i
Options Includes FollowSymLinks
% g* K m* f/ S, Z9 M4 W
AllowOverride All
+ b; F+ u) A; M# T: g0 g- G) }& Y
Allow from all
. {* E0 E9 p( K0 z& o) d3 K
Order allow,deny
b$ w9 f, }! a! y- H
addDefaultCharset UTF-8
9 h! a/ T# q- a/ \1 ?$ g8 e8 A2 d
</Directory>
4 |. z! c' V; Y k" d) O: \- P
複製代碼
存檔後記得重啟httpd : service httpd restart 才會生效
R. d5 d6 c; `5 n0 I
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/)
Powered by Discuz! X3.2