偽靜態和重定向(apache)學習筆記
日誌
錯誤日誌檔案:
/logs/error.log(或error_log)
日誌級別(級別從高到低):
debug, info, notice, warn, error, crit, alert, emerg.
低階別的日誌選項會包括高階別的資訊,如info會包含notice、warn的資訊
預設配置:
LogLevel warn
除錯配置(舉例):
LogLevel alert rewrite:trace8
.htaccess語法
Flag使用
重定向(內部跳轉301)
舉例:將.htm訪問跳轉到.html上
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.shtml
R 重定向(外部跳轉302)
備註:R方式的重定向預設是相對一個基準路徑的,加上/才會訪問當前根目錄下。可以通過設定RewriteBase來設定基準路徑。
舉例:將.htm訪問跳轉到根目錄下的.html上
RewriteEngine on
RewriteRule ^(.*)\.htm$ /$1.html [R]
301和302的區別
301 永久重定向,SEO友好,網站SEO評價會傳到重定向網址
302 臨時重定向
C 滿足條件執行下一跳規則
例子:*.htm會跳轉到*.php,*.html不會跳轉到*.php
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.html [C]
RewriteRule ^(.*)\.html$ $1.php
L 該規則為最後一條執行規則,下面的規則都不執行
例子:
RewriteEngine on
RewriteRule ^(.*)\.html$ first.php?url=$1 [L]
RewriteRule ^(.*)\.html$ second.php?url=$1
NE 特殊字元不進行轉義
例子:會顯示#(沒有轉義)
RewriteEngine on
RewriteRule ^(.*)\.html$ /index.php#$1 [R,NE]
NC 匹配模式大小寫不敏感
例子:/AAA/… 也會被匹配
RewriteEngine on
RewriteRule ^aaa/(.*)\.html$ /bbb/$1.html [NC]
G 連結失效(GONE)
例子:
RewriteEngine on
RewriteRule ^aaa/(.*)$ - [G]
QSA 擷取URL中的鍵值對
例子:訪問per/index.php?name=xiaoming會跳轉到/per.php?url=index.php&name=xiaoming
RewriteEngine on
RewriteRule ^per/(.*)$ /per.php?url=$1 [R,QSA]
RewriteBase 配置跳轉基準路徑
例子:
- 內部跳轉:直接替換
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.html
- 外部跳轉:替換時會加上絕對路徑,所以一般需要在$1前加上/來實現相對跳轉功能
RewriteEngine on
RewriteRule ^(.*)\.htm$ /$1.html [R]
- 若要用外部跳轉實現內部跳轉效果,需要配置基準跳轉路徑RewriteBase
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html [R]
內部跳轉和外部跳轉(重定向)的區別
內部跳轉url不會改變
外部跳轉url會改變成跳轉到的網址
RewriteCond 條件控制
很容易理解,滿足Rewritecond的,才會執行RewriteRule
舉例:
- 使用rule變數
例子:URL中含有test的才能執行RewriteRule
RewriteEngine on
RewriteCond $1 "test"
RewriteRule ^(.*)\.htm$ $1.html
- 使用系統變數
例子:當訪問host為127.0.0.1時,自動跳轉到localhost
RewriteEngine on
RewriteCond %{HTTP_HOST} "127.0.0.1"
RewriteRule ^(.*)$ http://localhost/$1 [R]
- 使用cond變數
例子:先取出地址最後一位數字,存放在%1中,如果等於1,則執行rule
RewriteEngine on
RewriteCond %{HTTP_HOST} "127.0.0.(.*)"
RewriteCond %1 "2"
RewriteRule ^(.*)$ http://localhost/$1 [R]
- 特殊標記
判斷為目錄 -d
判斷為檔案 -f
條件判斷 [OR]
加[OR]之後,只要有cond之間一個滿足,即可執行rule
而預設情況是所有cond之間為and,即所有cond成立,才執行rule
例子:下面例子中會執行rule
RewriteEngine on
RewriteCond C:/Windows/ -d [OR]
RewriteCond C:/Windows/ -f
RewriteRule ^(.*)\.htm$ $1.html
RewriteMap使用
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$ ${maps:$1|NotFound}
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 on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !localhost [NC]
RewriteRule \.(gif|png|jpg|jpeg)$ - [F,NC]
防盜鏈針對http_referer而制定,部分瀏覽器(或外掛)做了一些改變,傳送請求不帶http_referer,這種方法則無法防盜鏈
限制IP訪問(重定向)
httpd.conf中
#拒絕指定IP訪問(重定向)
RewriteMap hosts-deny txt:E:/host-deny.txt
.htaccess中
RewriteEngine on
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NotFound} deny
RewriteRule ^ - [F]
host-deny中新增限制IP
#測試限制IP
192.168.2.100 deny
127.0.0.1 deny
相關文章
- 偽靜態配置apache 和nginxApacheNginx
- PHP重定向與偽靜態PHP
- Object C學習筆記10-靜態方法和靜態屬性Object筆記
- Apache偽靜態html(URLRewrite)設定法ApacheHTML
- PbootCMS網站apache偽靜態規則boot網站Apache
- Apache學習筆記Apache筆記
- 偽靜態、靜態和動態的區別
- PHP學習筆記——延遲靜態繫結PHP筆記
- 網站偽靜態和純靜態區別網站
- php頁面靜態化技術;學習筆記PHP筆記
- Apache Oozie學習筆記(一)Apache筆記
- Apache ShenYu 學習筆記一Apache筆記
- Nginx/Apache之偽靜態設定 - 運維小結NginxApache運維
- apache2.4.33偽靜態配置入門教程(1)Apache
- 易優cms apache伺服器偽靜態規則Apache伺服器
- 《從零開始學Swift》學習筆記(Day 36)——靜態方法Swift筆記
- ASP.NET偽靜態及靜態ASP.NET
- .NET偽靜態使用以及和純靜態的區別
- SpringMVC學習筆記9-靜態資源對映SpringMVC筆記
- Nginx偽靜態教程Nginx
- pbootcms偽靜態教程boot
- thinkphp Nginx偽靜態PHPNginx
- hadoop 偽分散式模式學習筆記Hadoop分散式模式筆記
- Web 開發學習筆記(4) — 重定向與HSTSWeb筆記
- CSRF 跨站請求偽造學習筆記筆記
- nginx偽靜態檔案Nginx
- wordpress偽靜態的原理
- thinkphp 偽靜態規則PHP
- 網站偽靜態配置網站
- 十五章 CI框架學習筆記(二)載入靜態內容框架筆記
- Django2學習筆記--引用本地靜態檔案css,js等Django筆記CSSJS
- centos5.4之apache學習筆記(一)CentOSApache筆記
- apache學習筆記一(安裝apache2+php+resin)(轉)Apache筆記PHP
- Typecho程式偽靜態規則
- 網站提速-偽靜態(3)網站
- urlrewrite偽靜態匹配問題
- PHP 手冊 (類與物件) 學習筆記九:Static(靜態)關鍵字PHP物件筆記
- React學習筆記-State(狀態)React筆記