SEO中的正則表達式

2018-09-23 15:12 更新

什么是正則表達式?
正則表達式通常用來描述或者匹配一系列符合某個句法規(guī)則的字符串。比如^Colou?r$ 是一個用來匹配color和colour這兩個字符串的正則表達式。一枚正則表達式由字符和元字符組成。

什么是元字符?
元字符是正則表達式中具有特殊意義的字符。它們是正則表達式的基石。比如[], ^, (), {}, $, +, *等。

正則表達式的元字符:
[]
^
()
$
+
?
.
*
|
\
!
1. [] – 這個中括號用來匹配其內(nèi)部的任何一個單字符,例如:
[a] => 匹配一個單字符,它是小寫字母a.
[ab] => 匹配一個單字符,它是小寫字母a或者b.
[aB] => 匹配一個單字符,它是小寫字母a或者大寫字母B.
[1B] => 匹配一個單字符,它是數(shù)字1或者大寫字母B.
[Dog] => 匹配一個單字符:它是大寫字母D,小寫字母o或者小寫字母g。
[123b] => 匹配一個單字符:它是數(shù)字1, 2, 3或小寫字母g.
[1-3] => 匹配一個單字符,它是數(shù)字1, 2或者3。
[0-9] => 匹配一個單字符,它是一個數(shù)字。
[a-d] => 匹配一個單字符,它是小寫字母a, b, c或者d。
[a-z] => 匹配一個單字符,它是一個小寫字母。
[A-Z] => 匹配一個單字符,它是一個大寫字母。
[home.php] => 匹配一個單字符,它是小寫字母h,小寫字母o,小寫字母m,小寫字母e,特殊字符.,小寫字母p,小寫字母h或者小寫字母p。

正則表達式

2. ^ – 又叫“脫字符”,用來表示一段正則表達式的開始,例如:
^Colou?r => 匹配一個樣本,該樣本以Color或者Colour起頭。
^Nov(ember)? => 匹配一個樣本,該樣本以Nov或者November起頭。
^elearning*\.html => 匹配一個樣本,該樣本以elearning.html起頭。
^\.php => 匹配一個樣本,該樣本以任意php文件起頭。
^product-price\.php => 匹配一個樣本,該樣本以product-price.php起頭。

脫字符跟隨向右開口的中括號表示否定,例如:

[^a] => 匹配一個單字符,只要它不是小寫字母a。
[^B] => 匹配一個單字符,只要它不是大寫字母B。
[^1] => 匹配一個單字符,只要它是它不是數(shù)字1。
[^ab] => 匹配一個單字符,只要它不是小寫字母a或b。
[^aB] => 匹配一個單字符,只要它不是小寫字母a或大寫字母B。
[^1B] => 匹配一個單字符,只要它不是數(shù)字1或者大寫字母B。
[^Dog] => 匹配一個單字符,只要它不是大寫字母D,小寫字母o或者小寫字母g。
[^123b] => 匹配一個單字符,只要它是它不是數(shù)字1,2,3或者小寫字母b。
[^1-3] => 匹配一個單字符,只要它不是數(shù)字1,2或3。
[^0-9] => 匹配一個單字符,只要它不是數(shù)字。
[^a-z] => 匹配一個單字符,只要它不是小寫字母。
[^A-Z] => 匹配一個單字符,只要它不是大寫字母。

3. () – 圓括號用來匹配字符串,例如:
(a) => 匹配字符串a(chǎn)。
(ab) => 匹配字符串a(chǎn)b。
(dog) => 匹配字符串dog。
(dog123) => 匹配字符串dog123。
(0-9) => 匹配字符串0-9。
(A-Z) => 匹配字符串A-Z。
(a-z) => 匹配字符串a(chǎn)-z。
(123dog588) => 匹配字符串123dog588。
注意:()還被用來創(chuàng)造和儲存變量。如:^(.*)$

4. $ – 用來標記一則表達式或者是一行的完結(jié),例如:
Colou?r$ => 匹配一個樣本,該樣本以Color或者Colour結(jié)尾。
Nov(ember)?$ => 匹配一個樣本,該樣本以Nov或者November結(jié)尾。
elearning*\.html$ => 匹配一個樣本,該樣本以elearning.html結(jié)尾。
*\.php$ => 匹配一個樣本,該樣本以任意php文件結(jié)尾。
product-price\.php$ => 匹配一個樣本,該樣本以product-price.php結(jié)尾。

5. + – 一次或多次匹配前面的子字符,例如:
[a]+ => 一次或多次匹配小寫字母a。
[dog]+ => 一次或者多次匹配小寫字母d,o,或者g。
[548]+ => 一次或者多次匹配數(shù)字5,4或者8。
[0-9]+ => 一次或多次匹配數(shù)字。
[a-z]+ => 一次或多次匹配小寫字母。
[^a-z]+ => 一次或者多次匹配非小寫字母。
[a-zA-z]+ => 匹配任意的大小寫字母組合。
[^9]+ => 一次或者多次匹配非9的字符。

6. ? – 零次或一次匹配前面的字符,例如:
[a]?+ => 零次或一次匹配小寫字母a。
[dog]? => 零次或者一次匹配小寫字母d,o,或者g。
[^dog]? => 零次或者一次匹配非小寫字母d,o或者g。
[0-9]? => 零次或多次匹配數(shù)字。
[^a-z]? => 零次或多次匹配小寫字母。
注意:在正則表達式中使用?表示之前的字母或者字母組可有可無。例如:正則表達式^colou?r$同時匹配color和colour。相似地,正則表達式^Nov(ember)28th?$匹配:nov 28,november 28,Nov 28th和November 28th。

7. . – 匹配非行尾的單字符,例如:
正則表達式Action.,Scene2匹配Action1,Scene2; Action A,Scene2; Action9,Scene2但卻不匹配Action10,Scene2或者Action AB,Scene2。

8. * – 以任意次數(shù)(包括0次)匹配前面的字符,例如:
正則表達式31*將會匹配3,31,311,3111,31111等。

9. | – 表明邏輯或,例如:
正則表達式(His|Her)匹配字符串his或者her。

10. \ – 將下一個字符標記為一個特殊字符、或一個原義字符、或一個向后引用,或一個八進制轉(zhuǎn)義符,例如:
正則表達式^www\.abc\.com$匹配www.abc.com

11.! – 表明邏輯非。但不像^(脫字符),它只在規(guī)則和條件的開頭使用。例如:
(!abc) => 匹配非字符串a(chǎn)bc。
[!0-9] => 匹配非數(shù)字的單字符。
[!a-z] => 匹配非小寫字母的單字符。


seo

一些正則表達式
^(*\.html)$ => 匹配.html前任意個數(shù)的字符并將其存入變量。
^dog$ => 匹配字符串dog。
^a+$ => 一次或多次匹配小寫字母a。
^(abc)+$ => 一次或多次匹配字符串a(chǎn)bc。
^[a-z]+$ => 一次或多次匹配小寫字母。
^(abc)*$ => 以任意次數(shù)匹配字符串a(chǎn)bc。
^a*$ => 以任意次數(shù)匹配小寫字母a。

問:
找出所有以elearning開頭并且包含.html擴展名的文件。
^elearning*\.html$

問:
找出所有的PHP文件。
^*\.php$

mod_rewrite
這是一個用C語言寫的模塊(功能):mod_rewrite.c。這個模塊只能在Apache服務(wù)器1.2或之后的版本下工作同時被.htaccess文件執(zhí)行(這是一個包含文件和文件夾配置指令和規(guī)則的ASCII文件)。通過這個模塊你可以:

重寫URL
重定向URL
解決正則URL問題
解決熱鏈接問題
制作定制的403和404頁面
基于IP地址提交內(nèi)容,益處無窮
配置指令類型

總共有9種配置指令類型:

RewriteEngine
RewriteOptions
RewriteLog
RewriteLogLevel
RewriteLock
RewriteMap
RewriteBase
RewriteRule
RewriteCond
但在這里我們只討論三種指令:RewriteEngine, RewriteRule和RewriteCond。我至今還沒發(fā)現(xiàn)其他的指令有什么用。但如果你想,其他的指令也會對SEO有所幫助。

RewriteEngine

這個配置指令用來激活或關(guān)閉mod_rewrite模塊。

語法:RewriteEngine on/off

默認值:RewriteEngine off
這就是為什么在.htaccess文件中我們要加入下面的代碼來激活mod_rewrite模塊:

Options +FollowSymLinks

RewriteEngine on
RewriteRule

這個配置指令告訴服務(wù)器將給定的語句編譯成規(guī)則。

語法:Rewrite <pattern> <substitution> [FLAGS]
這里的pattern是一個正則表達式而substitution是一個URL.
FLAG可以是[R], [F], [NC], [QSA], [L], [OR]等。

[R] => 重定向。默認值為302??梢员毁x予從300到400的任意數(shù)值,例如:
RewriteRule ^index\.html$/index.php [r=301]
[F] => 禁止。經(jīng)常與連字符-一起使用。這個連字符告訴服務(wù)器不要進行任何替代。這個信號告訴服務(wù)器不要完成請求,同時返還一條403代碼。例如:
RewriteRule ^product-price\.php$ -[F]
[NC] => 它告訴服務(wù)器在匹配樣本時無視大小寫。例如:
RewriteRule ^him*\.php$[nc]
[QSA] => 追加請求字符串(Query String Append)。它告訴服務(wù)器將字符串從舊的URL傳遞到新的。
[L] => 最后規(guī)則。這個標簽告訴服務(wù)器不要再處理更多的規(guī)則了。
[OR] => 邏輯或。這個標簽用于RewriteCond聲明中的邏輯或。

RewriteCond

這個配置指令告訴服務(wù)器將一個給定的聲明編譯成立刻跟進的規(guī)則的一個條件。

語法:RewriteCond_syntax
這里第一個mod_rewrite將每一個URL和給定的樣本進行匹配。如果沒有URL符合樣本,那么mod_rewrite就會執(zhí)行下一條規(guī)則。如果有一條URL和樣本匹配,那么mod_rewrite就會搜索相應(yīng)的RewriteCond。如果沒有相應(yīng)的RewriteCond存在,那么匹配的URL就會被替代。
如果相應(yīng)的RewriteCond存在,那么每一條RewriteCond都會以從上到下的順序被執(zhí)行。服務(wù)器會將每一條RewriteCond的測試字符串和它相應(yīng)的條件樣本進行匹配。如果測試字符串與相應(yīng)的條件樣本不匹配,那么mod_rewrite就會執(zhí)行下一條規(guī)則,否則就處理下一條RewriteCond。當所有的RewriteCond都成功處理完畢時,匹配的URL會被替代。測試字符串可以是:

簡單文本
RewriteRule后方引用
RewriteCond后方引用


服務(wù)器變量
RewriteRule后方引用
形式為$N,這里的N可以是從0到9的任意數(shù)字。它用來標記在RewriteRule樣本中被創(chuàng)建的變量,例如:

Rewrite ^(.*)$/index.php/$1 [L]
RewriteCond后方引用
形式為%N,這里的N可以是從1到9的任意數(shù)字。它用來標記從最后的匹配RewriteCond創(chuàng)建而來的在cond樣本中的變量,例如:

RewriteCond %{HTTP_HOST} ^(123\.42\.162\.7)$ 

RewriteCond %1 ^123\.42\.162\.7$ 

RewriteRule .........

服務(wù)器變量

語法: % {Variable_Name}
例如:

%{HTTP_HOST} => 這個變量給出服務(wù)器信息以及其IP地址。
%{HTTP_USER_AGENT} => 這個變量給出用戶操作系統(tǒng)和瀏覽器信息。
%{QUERY_STRING} => 這個變量返回查詢字符串。
%{HTTP_REFERRER} => 這個變量返回來源的URL。
%{REMOTE_ADDR} => 這個變量返回來源的IP地址。

搜索引擎優(yōu)化

實例一

將所有對media文件夾的頁面請求重定向到親的頁面media.html

RewriteRule ^media/$/media.html [r=301,l]


實例二

將oldaddress.html頁面重定向至newaddress.html頁面

RewriteRule ^oldaddress\.html$/newaddress.html [r=301,l]


實例三

將一個網(wǎng)址重定向至另一個網(wǎng)站

Redirect 301 http://www.anotherwebsite.com


實例四

禁止來自IP地址為12.34.56.78的訪問者查看product-prices.html頁面

RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$ 

RewriteRule ^product-prices\.html$/sorry.html -[F]


實例五

將abc.com/index.html重定向到www.abc.com

RewriteCond %{REQUEST_URL} ^index\.html$ 

RewriteRule ^(.*)$ http://www.abc.com/$1 [r=301,l]


實例六

阻止來自IP地址為12.34.56.78的訪客查看sales-demo文件夾

RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$ 

RewriteRule ^sales-demo/$ /sorry.html -[F]


實例七

阻止來自IP地址為12.34.56.78的訪客訪問你的網(wǎng)站www.abc.com

RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$ 

RewriteRule ^.*$/ -[F]
.htaccess

這是一個包含了文件、文件夾和整個網(wǎng)站的配置指令以及規(guī)則的ASCII碼文件。你能在一個服務(wù)器上擁有多個.htaccess文件。事實上每個文件夾和目錄都能有一個.htaccess文件。當你將這個文件放置在某一文件夾中時,其中的規(guī)則僅對該文件夾及其子文件夾中的文件有效。當你將這個文件放置在根目錄時,其中的規(guī)則適用于服務(wù)器上所有的文件夾和文件。一個有效的.htaccess文件必須包含以下兩行代碼:

Options +FollowSymLinks 

RewriteEngine on

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號