Apache偽靜態學習

原文鏈接:http://www.benben.cc/blog/?p=305

Apache中有著這樣一個模塊,它默默無聞,卻是URL操作的瑞士軍刀!有人這樣評價它:“盡管它的例子和文檔數量可以以噸來計算,但它仍然是巫術,該死的巫術。”

它是一個基于一定規則的實時重寫URL請求的引擎,它的名字叫做“rewrite_module”,它的源文件是“mod_rewrite.c”。

1、什么是mod_rewrite?

mod_rewrite是一個Apache模塊,該模塊提供了一個基于規則的(使用正則表達式分析器的)實時重寫URL請求的引擎,從而使得服務器可以操縱客戶端所請求的網址。mod_rewrite會通過事先已經定義的正則表達式規則對請求的網址進行匹配檢查,如果在地址中匹配到一個規則,并滿足相應的條件,該規則就會被一個替代的字符串或者是動作所取代。

2、使用mod_rewrite的優點?

使用mod_rewrite,有兩個最為顯著的優點,一是能夠將丑陋的、復雜的網址轉化為所謂的“友好的”或者是“干凈的”網絡地址。如此一來,不僅僅提升了良好的用戶體驗,而且還有利于搜索引擎對網址的抓取分析,創建友好的網址也是一種搜索引擎優化(SEO)技術。

來看看下邊的例子:

通過我們的改造,新網址更容易為人類所理解,瞥一眼就可以很容易記憶,諸如此類的網址不僅僅是看上去變的簡單了,對搜索引擎來說也是友好的,可以使搜索引擎更好的從中提取語義,除了這些簡單的轉換,mod_rewrite還可以靈活的做很多的事情。當然,所有這些功能和靈活性帶來一個問題,那就是復雜性,因此,不要指望一天之內就能看懂整個模塊。

二是能夠顯著的提升網站的安全性,網址1的方式是一種暴露式的腳本調用,倘若程序編寫時候過濾不周密就會導致調用失敗,甚至導致數據庫的破壞。然而通過轉換為更加友好的網址形式,用戶并不知道list.php的存在,試圖在這種情況下進行攻擊在執行PHP之前就已經失敗了。

3、如何啟用mod_rewrite?

在服務器上啟用mod_rewrite模塊必須修改全局配置文件(httpd.conf),如果你想確認你的主機是否支持該模塊,只需要打開httpd.conf文件,找到

LoadModule rewrite_module modules/mod_rewrite.so
如果不幸它被注釋掉了(行首#為注釋符號),那么刪掉注釋符號”#”重啟服務器即可。

除此之外,你還可以通過phpinfo()來測試mod_rewrite模塊是否啟用:

<?php phpinfo(); ?>
在”Loaded Modules”中,如果你能看到”mod_rewrite”的身影,那么恭喜你,你的服務器支持mod_rewrite模塊。

4、哪個文件用來存儲mod_rewrite規則?

如果你的主機是Windows,那么你需要將規則寫進httpd.ini,如果你的主機是Linux,就需要用.htaccess來大展身手了。

5、mod_rewrite的典型應用有哪些?

在許多學科,除非你自己親自動手嘗試,否則你是不可能學會的!學習偽靜態尤其是如此,mod_rewrite有許多非常貼近實際應用的用途,譬如如下三種典型的應用:

a.子目錄綁定

譬如a.com指向我們服務器的根目錄\public_html\,而特殊需要使得我們需要將b.com指向到服務器的子目錄\public_html\b,但是有時候我們的服務器并不支持子目錄綁定,這時候我們可以將b.com像a.com一樣綁定至根目錄,然后通過htaccess進行URL重定向從而間接的實現子目錄的綁定。

AddHandler application/x-httpd-php5s .php
RewriteEngine onRewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteCond %{REQUEST_URI} !^/b/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /b/$1RewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteRule ^(/)?$ b/default.html [L]
通過這些規則,就能夠使得我們訪問b.com的時候,自動重定向到http://a.com/b/,從而達到了我們間接實現子目錄綁定的目的。

b.網址歸一化

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
這是一條最經典的重寫規則,它能夠將用戶輸入的所有開頭為http://www.example.com/的網址硬性重定向到http://example.com/,比如用戶輸入http://www.example.com/admin,重寫后網址就變成了http://example.com/admin。

c.圖片防盜鏈

網站盜鏈會大量消耗被盜鏈網站的帶寬,而真正的點擊率也許會很小,嚴重損害了被盜鏈網站的利益。早期的盜鏈一般是一些比較小的網站盜取一些有實力的大網站的地址,盜鏈的目標比較有針對性,現如今,一些大型的網站也已經開始把盜鏈的目光鎖定在了整個互聯網上,竊取整個互聯網上的其它機器的帶寬。常見的盜鏈有以下幾種:圖片盜鏈、音頻盜鏈、視頻盜鏈、文件盜鏈。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !example.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]RewriteRule .*\.(gif|jpg|png)$ http://www.example.com/nolinks.gif [R,NC,L]
</IfModule>

規則中的網址我暫且稱作“白名單”,亦即只有白名單中的網址可以訪問服務器上的資源。而規則最后則限定了防盜鏈所起作用的文件類型(gif|jpg|png),如果有其它網站試圖訪問服務器上被限定的文件類型,就會被重定向到我們指定的警告圖片。

當然,這種方法并不是100%有效的,但是不可否認,它是禁止大多數盜鏈的最有效的方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276627.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不同的容器里實現 RadioButton的單選

請教一個各位牛人一個問題&#xff0c;如圖&#xff1a; &#xff08;問題解決&#xff0c;見后面的解決方案~~&#xff09; 怎么在不同的winform容器(GroupBox)里實現 RadioButton &#xff08;如圖中兩個“詳細照會”&#xff09;的單選&#xff0c;請各位牛人給出實現的思…

html調用接口_搜狗ocr識別接口

詳細情況在代碼中說明&#xff0c;如果不想自己使用TensorFlow&#xff0c;可使用下面接口這是要識別的圖片&#xff1a;最終識別的結果&#xff1a;This is a lot of 12 point text to test theocr code and see if it works on all typesof file format.The quick brown dog …

CSAcademy Or Problem

傳送門 一口大鍋&#xff08; 斜率的確是有單調性 并且可以進行凸優化的 明明是證出來的 為什么自己就不相信呢&#xff08; 我們發現對于當前點作為擴展的右端點 那么他前面至多有20個點會影響到這一段區間的或值 我們可以預處理記錄出來這些節點的位置 很明顯 答案隨著右端點…

apache的rewrite模塊實例操作

原文鏈接&#xff1a;http://blog.5ilinux.com/archives/2006/01/apacherewrite.html 我們的目標是把http://www.bulknews.cn/show.php?id1014700通過rewrite的url重寫&#xff0c;使可以直接http://www.bulknews.cn/1014700.html訪問 1.首先配置apache的httpd.conf&#xf…

哈佛圖書館的二十條訓言

1.此刻打盹&#xff0c;你將做夢;而此刻學習&#xff0c;你將圓夢。 2.我荒廢的今日&#xff0c;正是昨日殞身之人祈求的明日。 3.覺得為時已晚的時候&#xff0c;恰恰是最早的時候。 4.勿將今日之事拖到明日。 5.學習時的苦痛是暫時的&#xff0c;未學到的痛苦是終生的。 6.學…

python截取關鍵字后的字符串_使用正則表達式獲取python中特定字符串之后的所有內容...

如果要使用正則表達式&#xff0c;請使用re.findall&#xff1a;re.findall((?<com/).*$, "www.example.com/thedubaimall") # [thedubaimall] 一些速度測試有DeepSpace的建議&#xff1a;%timeit re.findall((?<com/).*$, "www.example.com/thedubaima…

vue起手式

許久未曾更新文章&#xff0c;雖然不是程序員但還是忘懷不了擼碼的覺悟.1.VUE環境搭建安裝node.js (項目開發前準備) Node.js官網&#xff1a;https://nodejs.org/en/ 進入Node.js官網&#xff0c;選擇下載并安裝Node.js。安裝過程只需要點擊“下一步”即可&#xff0c;非常簡單…

C#編程盡量使用接口(轉)

.NET框架包括類和接口&#xff0c;在編寫程序的時候&#xff0c;你可能知道正在用.NET的哪個類。然而&#xff0c;在這種情況下如果你用.NET支持的接口而不是它的類來編程時&#xff0c;代碼會變得更加穩定、可用性會更高。請分析下面的代碼&#xff1a; private void LoadLi…

Apache 重寫規則的常見應用 (rewrite)

本文出自:http://www.linuxforum.net 作者:吳阿亭 Jephe wu (2001-09-05 08:00:00) 一:目的 本文旨在提供如何用Apache重寫規則來解決一些常見的URL重寫方法的問題&#xff0c;通過常見的 實例給用戶一些使用重寫規則的基本方法和線索。 二:為什么需要用重寫規則&#xff1…

python怎么模擬瀏覽器交互_干貨分享:python爬蟲模擬瀏覽器的兩種方法實例分析(趕緊收藏)...

今天為大家帶來的內容是&#xff1a;干貨分享&#xff1a;python爬蟲模擬瀏覽器的兩種方法實例分析&#xff08;趕緊收藏&#xff09; 文章主要介紹了python爬蟲模擬瀏覽器的兩種方法,結合實例形式分析了Python爬蟲模擬瀏覽器的兩種常見操作技巧與使用注意事項,需要的朋友可以參…

vue-cli3

github&#xff1a;https://github.com/vuejs/vue-cli org&#xff1a;https://cli.vuejs.org/ guide&#xff1a;https://cli.vuejs.org/guide/ config&#xff1a;https://cli.vuejs.org/config/ 轉載于:https://www.cnblogs.com/veritas-sj/p/10147789.html

Indy中判斷郵件來源

首先從TidMessage中獲得郵件的頭信息&#xff1a; strHeader:aIdMessage.Headers.text; 然后&#xff0c;用正則表達式取出Received: vReceiveIP:GetNeedStrByPerlReg(strHeader,(Received:)(.)(])); 再取出X-Originating-IP&#xff1a; vOriIP:GetNeedStrByPerlReg(strHea…

用jQuery實現彈出窗口/彈出div層

原文鏈接&#xff1a;http://hi.baidu.com/awz_tiger/item/863cfc10c4bb0f6171d5e8d9 http://blog.163.com/qiuxinke2006126/blog/static/24885580201131763139536/ http://hi.baidu.com/kilwin/blog/item/f4cfaf2695375920c9955947.html 用div層代替傳統的彈出窗口已經變得很…

模塊定義文件導出類_濃縮的就是精華——ES6模塊精煉講解

概述在 ES6 前&#xff0c; 實現模塊化使用的是 RequireJS 或者 seaJS(分別是基于 AMD 規范的模塊化庫&#xff0c; 和基于 CMD 規范的模塊化庫)。ES6 引入了模塊化&#xff0c;其設計思想是在編譯時就能確定模塊的依賴關系&#xff0c;以及輸入和輸出的變量。ES6 的模塊化分為…

關于快速開發和設計應用系統的一些個人的意見

作為程序員&#xff0c;經常會為我們的客戶去開發和設計各種應用系統&#xff0c;比如OA /CRM/物流調度/客戶服務/電子政務。。。及各種管理信息系統&#xff0c;我們經常會去開發和實現這樣的一些系統&#xff0c;每周、每月、每年經常都要去做這樣的一些開發工作&#xff0c;…

Jquery1.6版本后attr的變化

原文鏈接&#xff1a;http://www.cnblogs.com/-run/archive/2011/11/16/2251569.html Jquery1.6版本后attr的變化 Jquery1.6版本后 attr 改動后的效果&#xff1a; jquery1.6版本&#xff1a; 下文來自www.jquery.com The difference betweenattributes and properties can b…

idea main scanner 輸入_哇曬,你竟然不知道idea的 Live Templates

最近公司新近來一名程序猿&#xff0c;在寫代碼時&#xff0c;美美寫到System.out.println的時候&#xff0c;都要一母不差的用鍵盤敲上去&#xff0c;我問他你之前有用過eclipse中的快捷方法syso嗎&#xff1f;于是&#xff0c;我給他介紹了一下&#xff0c;在idea中如何自定義…

Android開發需要了解的 IM 知識

引言即便在通訊如此發達的今天&#xff0c;IM 也依然是諸多場景下非常重要的基礎能力。因此做為 一名 Android 開發&#xff0c;不可避免的會遇到一些IM 相關的需求或問題。本文以一個Android開發的角度來講述IM 開發相關的基礎知識。想要閱讀更多技術干貨、行業洞察&#xff0…

偷梁換柱做自己的封裝系統

偷梁換柱做自己的封裝系統&#xff01;菜鳥一開始都想把自己的信息加到系統里&#xff0c;但封裝系統只會一點&#xff01;但我們可“拿來”&#xff0c;我們可以用偷梁換柱的方法來修改別人的系統&#xff0c;本文以雨林的GHOST5.0系統為例。一、準備工作1、當然是下載一個自己…

JQuery 1.6+ checkbox 狀態選擇

示例&#xff1a; HTML: <form><table><tr><td><input type"checkbox" id"select_all"/></td></tr><tr><td><input type"checkbox" name"select[]"/></td></…