最新實戰講解 htaccess檔案rewrite

2021-06-18 19:27:34 字數 3645 閱讀 1657

.htaccess檔案大家都不陌生吧。不認識的自己去搜一下……順便告訴你,這是個好東西,值得一學。

似乎網上關於.htaccess編寫方法的教程很有限,相信博主們也沒有幾個是自己寫的吧?

我在這裡就搜了幾個常用規則,總結一下rewrite規則的用法。當然這只是.htaccess功能的一小部分,但是相當實用。

如果熟練掌握rewrite規則的編寫,能夠加強對**url的控制,對使用者體驗、seo都十分有利。

一、防盜煉功能

逐行講解一下:

1.開啟rewrite功能。有可能伺服器設定裡已經是全域性下開啟了,但是多寫也沒事。

2.rewritecond指令,定義生效條件,用於尋找匹配條件的位址。後面內容用正規表示式匹配。代表含義是傳送的請求不由mysite.com而來,那就是盜鏈啦。末尾的[nc]代表忽略大小寫。

3.傳送請求的主機字首不為空。

4.rewriterule指令,定義重寫規則,把匹配的位址按此規則重寫。本例中把這些字尾為這些格式的,都替換到某乙個下。[l]表示這是最後一段規則。

只這四行就實現了防盜煉是不是很神奇(- -||),編寫起來是不是又覺得複雜。

這裡總結了幾個常用引數(不是全部):

rewritecond

下:[nc] 不分字母大小寫

[or] 用於連線下一條規則

rewriterule下:

[r] 強制重定向,[r=code]

code

預設為302

[f] 禁用url,返回http 403 錯誤

[l] 這是最後一條規則,之後內容無用

還有一篇關於正規表示式的教程(很詳細):

二、**規範化

1options +followsymlinks

2rewriteengine on

3rewritecond % ^yourdomain.com [nc]

4rewriterule ^(.*)$ [r=301,l]

這個是把所有二級網域名稱都重定向到www.yourdomain.com的例子,現在看來是不是很簡單了?

需要注意的是,這裡的options +followsymlinks不是必須的,但在某些伺服器如果不設定followsymlinks,可能引起500錯誤。

再來看乙個好玩的重定向

1rewriteengine on

2rewritebase /

3rewritecond % (googlebot)

4rewriterule ^ [r=301,l]

1.開啟rewrite功能。

2.rewritebase指令,設定目錄級重寫的基準url。可以理解成把該目錄(這個.htaccess所在目錄)假定為基準的url字首。本例中這樣的寫法無用。

3.rewritecond指令。匹配所有user_agent為googlebot的傳送請求。

4.rewriterule指令。本例中把這些請求都重定向到了abc.com。

在本例中,這個配置應該是黑客所為,把google蜘蛛指向某個**,等於偽造pr。

三、臨時錯誤頁面

當你的**在公升級、修改的時候,你最好讓訪客轉到指定的頁面,而不是沒做完的頁面或者是錯誤頁。

這時我們做乙個302轉跳就好。

1rewriteengine on

2rewritecond % !/maintenance.html$

3rewritecond % !^123.123.123.123

4rewriterule $ /error.html [r=302,l]

1.繼續開啟rewrite功能。- -|

2.request_uri,請求的url值。這裡指所有訪問maintenance.html頁面的請求。

3.remote_addr,向伺服器傳送請求的ip位址。本例中此處應設為你自己的ip,這樣就只有你能訪問。

4.rewriterule指令。本例中把這些請求都重定向到了error.html 。

在本例,我們總結幾個常用的正規表示式和特殊符號。

(.*) 用於匹配某一區域內所有內容。如 abc/def/ghi 可用 (.*)/(.*)/(.*)

匹配。([a-za-z_]+) 匹配英文單詞,允許用-和_連線。

([0-9]+) 匹配多位數字,通常用於匹配id。

([0-9]) 只匹配一位的數字。

^ 表示正則的開始

$ 表示正則的結束

四、重定向rss位址到feedburner

除了可以更改模板裡的rss位址外,.htaccess也能實現rss位址的更改,並更加方便。

1rewriteengine on

2rewritecond % !feedburner 

[nc]

3rewritecond % !feedvalidator [nc]

4rewriterule ^feed/?([_0-9a-z-]+)?/?$ [r=302,nc,l]

有了上面的總結,本例其實就很簡單了吧。

唯一要注意的是這樣操作要確保填寫正確的http_user_agent。其實你不常換模板的話。。可能還是直接改模板更省事。

mod_rewrite模組中文參考手冊

p.s.其實我以為rewrite也只是apache乙個模組而已,做到邊查邊寫足矣,實在不行直接去搜乙個規則也未嘗不可。沒有必要費太大力氣去學。不過其中的正規表示式還是非常實用的,值得深入學習。

LANMP 如何禁止訪問 htaccess 檔案

其實這個很簡單,因為 htaccess 在 lanmp 環境下,當他作為檔案被訪問的時候是由 nginx 作為靜態檔案來處理的,所以我們需要在 nginx 裡來新增規則。而且這個規則,在 nginx 預設的裡面是存在的,如下 deny access to htaccess files,if apac...

最新Hadoop Shell完全講解

功能 將乙個或多個原始檔系統的內容追加至目標檔案系統 2 cat 功能 將指定uri下的檔案內容輸出至stdout 在控制台列印 使用方法 hadoop fs cat uri hadoop fs cat flume web output part r 00000 3 chgrp 功能 改變檔案所屬的...

《Spring Boot入門到實戰》最新

課程介紹 本spring boot課程包括兩個小課程,分別為 spring boot快速入門 和 spring boot實戰高階 spring boot快速入門 課程大綱 1 spring boot入門 spring boot簡介 spring boot快速入門案例 2 spring boot進行w...