1. 程式人生 > >Apache Rewrite重寫模組(二):10個例項詳細分析

Apache Rewrite重寫模組(二):10個例項詳細分析

接上一篇文章。

以下所有例項,都是在本地測試,訪問ip為 127.0.0.2。所以,實際應用時需要換成域名,而且可能用到正則(如例項一)。

一、防止網站圖片被盜鏈

RewriteCond %{HTTP_REFERER}  !^$
#RewriteCond %{HTTP_REFERER}  !^http(s)?://(www\.)?你的域名.com [NC]
RewriteCond %{HTTP_REFERER} !^http://127.0.0.2 [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
(1)第1句(條件):來路 HTTP_REFERER 不為空

(2)第2句(條件):來路 HTTP_REFERER,不是以 http://127.0.0.2 開頭。[NC]表示不區別大小寫

(3)第3句(規則):請求的地址以 .jpg或.jpeg或.png或.gif 以結尾(即圖片檔案),則不重寫URL(- 告訴apache不要重寫;你也可以重定向到某張圖片)。

(4)[F] 即 Forbidden,表示伺服器返回 403 Forbidden錯誤給使用者瀏覽器(如下圖);[L]表示最後一條,如果匹配,就不再匹配後面的規則了。

如:http://127.0.0.5 請求了 圖片 http://127.0.0.2/111.jpg,返回403


二、重定向沒有 www 到帶 www 的URL(301重定向)

做SEO時,往往需要將 URL 統一標準化,將不帶 www 的 URL 做301 重定向到帶 www 的URL。 生效時,如果訪問 http://你的域名.com,會跳轉到 http://www.你的域名.com。

RewriteCond %{HTTP_HOST} ^你的域名.com$
RewriteRule (.*) http://www.你的域名.com/$1 [R=301,L]
(1)需要知道 %{HTTP_HOST} 代表什麼, 見本部落格的上一篇文章。

(2)R=301 表示 301 永久重定向;預設不寫時,是 302 臨時重定向。

(3)需要知道 RewriteRule 中的括號內的 .* 代表網址的哪一部分。如網址:http://你的域名.com/test.html,那麼,.* 就是 test.html。後面的 $1 即是 .* 。

測試:在PHP中,可以通過下面重寫規則,可以知道例子中的 .* 代表網址的哪一部分。

RewriteCond %{REQUEST_FILENAME} !index.php$
RewriteRule (.*)  index.php?id=$1
#index.php 將 $_SERVER 輸出

三、整站 301 重定向

換域名時,做整站301重定向。原理和例子2差不多

RewriteCond %{HTTP_HOST} 127.0.0.2
RewriteRule (.*)  http://127.0.0.5/$1  [R=301,L]

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

附圖1——RewriteRule 第三個引數列表


附圖2—— RewriteCond 常用正則和第三引數,及其它