Apache Rewrite重寫模組(二):10個例項詳細分析
阿新 • • 發佈:2019-02-16
接上一篇文章。
以下所有例項,都是在本地測試,訪問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]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++