偽靜態和重定向(apache)學習筆記

2021-08-08 23:12:45 字數 4492 閱讀 4773

錯誤日誌檔案:

/logs/error.log(或error_log)

日誌級別(級別從高到低):

debug, info, notice, warn, error, crit, alert, emerg.

低階別的日誌選項會包括高階別的資訊,如info會包含notice、warn的資訊

預設配置:

loglevel warn

除錯配置(舉例):

loglevel alert rewrite:trace8

重定向(內部跳轉301)

舉例:將.htm訪問跳轉到.html上

rewriteengine

onrewriterule

^(.*)\.htm$ $1.shtml

r 重定向(外部跳轉302)

備註:r方式的重定向預設是相對乙個基準路徑的,加上/才會訪問當前根目錄下。可以通過設定rewritebase來設定基準路徑。

舉例:將.htm訪問跳轉到根目錄下的.html上

rewriteengine

onrewriterule

^(.*)\.htm$ /$1.html[r]

301和302的區別

c 滿足條件執行下一跳規則

例子:*.htm會跳轉到*.php,*.html不會跳轉到*.php

rewriteengine

onrewriterule

^(.*)\.htm$ $1.html[c]

rewriterule

^(.*)\.html$ $1.php

l 該規則為最後一條執行規則,下面的規則都不執行

例子:

rewriteengine

onrewriterule

^(.*)\.html$ first.php?url=$1

[l]rewriterule

^(.*)\.html$ second.php?url=$1

ne 特殊字元不進行轉義

例子:會顯示#(沒有轉義)

rewriteengine

onrewriterule

^(.*)\.html$ /index.php#$1

[r,ne]

nc 匹配模式大小寫不敏感

例子:/aaa/… 也會被匹配

rewriteengine

onrewriterule

^aaa/(.*)\.html$ /bbb/$1.html[nc]

g 鏈結失效(gone)

例子:

rewriteengine

onrewriterule

^aaa/(.*)$ -[g]

qsa 擷取url中的鍵值對

例子:訪問per/index.php?name=xiaoming會跳轉到/per.php?url=index.php&name=xiaoming

rewriteengine

onrewriterule

^per/(.*)$ /per.php?url=$1

[r,qsa]

例子:

rewriteengine

onrewriterule

^(.*)\.htm$ $1.html

rewriteengine

onrewriterule

^(.*)\.htm$ /$1.html[r]

rewriteengine

onrewritebase /

rewriterule

^(.*)\.htm$ $1.html[r]

內部跳轉和外部跳轉(重定向)的區別

內部跳轉url不會改變

外部跳轉url會改變成跳轉到的**

很容易理解,滿足rewritecond的,才會執行rewriterule

舉例:

rewriteengine

[r]

判斷為目錄 -d

判斷為檔案 -f

加[or]之後,只要有cond之間乙個滿足,即可執行rule

而預設情況是所有cond之間為and,即所有cond成立,才執行rule

例子:下面例子中會執行rule

rewriteengine on

rewritecond

c:/windows/ -d [or]

rewritecond

c:/windows/ -f

rewriterule ^(.*)\.htm$

$1.html

apache的rewrite模組進行rewrite的時候,需要將規則直接寫到http.conf的rewrite模組中,並且規則變動一次就需要重啟apache伺服器一次。這個讓開發者比較鬱悶。這裡有乙個rewritemap解決了部分的問題,他的工作就是將乙個對映關係以map的形式儲存在乙個檔案中,我們可以通過修改這個檔案的對應關係而不需要重啟apache伺服器就可以應用對映關係。

常用格式

txt格式 一般對映

rnd格式 隨機對映,匹配結果可能有多個

例子1:瀏覽器訪問localhost/tt1會訪問test11。。。

httpd.conf內部

rewritemap pages txt:e:/page.txt

.htaccess中

rewriterule ^(.*).html$ $

page.txt中

#首行加注釋或空一行可以得出正常結果,原因待分析

tt1 test11

tt2 test22

例子2:瀏覽器訪問localhost/url1會隨機訪問localhost/s1(或s2、s3)

在httpd.conf內部

rewritemap dirs rnd:e:/dir.txt

.htaccess中

rewriterule ^(.*).html$ /$(dirs:$1|notfound)/$1.php

dir.txt中

#首行加注釋或空一行可以得出正常結果

url1 s1|s2|s3

url2 s4|s5

例子:只能通過localhost訪問

rewriteengine

onrewritecond

% !^$

rewritecond

% !localhost[nc]

rewriterule

\.(gif|png|jpg|jpeg)$ -[f,nc]

防盜煉針對http_referer而制定,部分瀏覽器(或外掛程式)做了一些改變,傳送請求不帶http_referer,這種方法則無法防盜煉

httpd.conf中

#拒絕指定ip訪問(重定向)

rewritemap hosts-deny txt:

e:/host-deny.txt

.htaccess中

rewriteengine

onrewritecond

$|notfound} deny

rewriterule

^ -[f]

host-deny中新增限制ip

#測試限制ip

192.168

.2.100 deny

127.0

.0.1 deny

偽靜態與重定向之初體驗

偽靜態 重點在偽 首先靜態與動態的區別在於資料的內容是否會改變,而不是形式是否改變。比如,一些門戶 首頁的html檔案中雖然包含一些動態的,但是內容從始至終都不更改,不與資料庫發生互動,頁面的資料一旦寫好,就不再改變的這一類檔案稱為靜態頁,所以常常是以.html和.htm結尾 動態網頁通常包含與資料...

偽靜態與重定向之初體驗

偽靜態 重點在偽 首先靜態與動態的區別在於資料的內容是否會改變,而不是形式是否改變。比如,一些門戶 首頁的html檔案中雖然包含一些動態的,但是內容從始至終都不更改,不與資料庫發生互動,頁面的資料一旦寫好,就不再改變的這一類檔案稱為靜態頁,所以常常是以.html和.htm結尾 動態網頁通常包含與資料...

Linux實現301重定向和偽靜態方法

在網上查詢了一下還沒有人分享linux主機如何通過.htaccess檔案同時實現301重定向和偽靜態的,為幫助朋友少走彎路,特以把經驗分享一下。用pw做了乙個新站,備案審核通過, google也均已收錄。但有個問題是,不像google那樣有 程式設計客棧管理員工具,可以設定主網域名稱,ksqznjn...