第一種方法:Apache環境中如果要將URL位址重寫,正規表示式是最基本的要求,但對於一般的URL位址來說,基本的匹配就能實現我們大部分要求,因此除非是非常特殊的URL地址,但這不是我要討論的範圍,簡單幾招學會Apache中URL地址重寫,透過實例展示,輕鬆學會URL地址重寫:
002
003 URLL 0 URL 0重寫網址:http://www.baidu.com/?p=152
006
007 原始URL:http://www.baidu.com/p152.html 原廠URL:http://www.baidu.com/p152.html 原廠URL:http://www.baidu.com/p152.html 寫規則:
010
011 ^p([0-9]+).html /?p=$1 [L] /?p=$1 [L] /?p=$1 [L]
014
015 ^ 配對行的開始,並符合URL地址的開頭部分,對於RewriteRule而言,網域名稱(http://www.xxxx.com)不是URL位址的一部分,如上:?p=152
016
017 () 分隔一個被捕獲的表達式,如上:([0-9]+)
018
019 [] 定義字符類,如上:[0-9] 表示從0-9的數字
20 配對1次或數次,如上:[0-9]+,表示任何數字組合 022 023 字元轉義,如上:轉義.24
026
027 [ L] 表示last,停止配對其它
028
029 方法如下:
030
031 找到檔案, 033 #LoadModule rewrite_module modules/mod_rewrite.so 註前面#034 035 2,開啟httpd-vhosts.conf文件,在VirtualHost新增重寫規則, 036 039 RewriteRule ^p([0-9]+).html / ?p=$1 [L] 040 041 基本上就上面這兩個步驟,其實總的來說,Apache中URL地址重寫還是比較簡單的,比看文檔要快的多,想深入了解還是有必要看看相關文件的,其它規則可以自訂。記住一點:任何匹配其實就是一個正規表示式的替換過程。 042 043 創建友善的搜尋引擎URL位址對於PHP程式設計師來說非常重要,因此簡單學會Apache中URL位址重寫將是一項最基本的要求。 044 045 046 第二種方法: 9 050 cat httpd.conf | grep rewrite 051 LoadModule rewrite_module modules/ mod_rewrite.so 052 053 2,產生偽靜態html連接: 054 057 在
061 /goods([ 0-9]+).html$ $1/goods.php?id=$2 [PT]
063 較簡潔的寫法:
064 5?
066 第一個(0-9]+)對應參數$1,以此類推第二個對應$2
067
RewriteRule /forum-([0-9]+ )-([0-9]+).html /forumdisplay.php?fid=$1&page=$2 [PT]
071
072 shttp://www.xxx.com/goods1.html.com/goods1. .php?id=1的內容相同
073
074 最後將所有連結換成設定後的偽靜態html位址方式
075
077 [PT]:url全域轉換,即轉換過的goods31.html對應goods.php?id=31 (預設為這個不加參數)
078 [R]: 跳到goods.php?id=31
079
080
081 3,防盜鏈:
081 3,防盜鏈:081 3, HTTP_HOST} !xxxx.com [R=301,L]
084 RewriteRule ^(.*)$ http://www.xxxx.com/warning.html [R=301,L]
085
086 把不是來自xxxx.com的請求重新導向至http://www.xxxx .com
087
088 較好的做法:
089 RewriteCond %{HTTP_REFERER} ! 0 RewriteRule .(mp3| rar|jpe|gif)$ http://www.xxxx.com/warning.jpg [R=301,L]
091
092 4,防百度爬蟲:
092 4,防百度爬蟲: 例 % uspider [ OR]
094 RewriteRule ^(.*)$ http://www.google.com [R=301,L]
095
098
099
100 PS:PHP偽靜態方式
101
102
105
106 http://www.xxxx.com/soft.php/1,100, 8630.html
107
108 其實處理的腳本是soft.php 參數為1,100,8630
109 1 00&c=8630 只不過這樣的URL太難記。搜尋引擎也不喜歡。 111 112 真靜態只是完全產生了HTML。 113 114 客戶端存取的時候直接輸出。不用腳本解釋。在流量非常大的時候(例如每天有數百萬的訪問量的時候)會起到很好的效果。也就是說伺服器端實實在在的存在這個HTML頁面。 115 116 當然在你網站的流量沒有那麼大的時候。 URL重寫是最好的方法(個人觀點,大流量的時候可以考慮負載平衡了。同樣沒關係) 117 118 附帶URL重寫的方法有很多種,APACHE,IISREWRITE。甚至PHP腳本都可以直接處理。例如上例就是PHP腳本直接處理(此方法好處是大流量的時候直接減輕WEB伺服器的壓力。PS:同樣也是個人觀點: 119 120 ============= ===================================== 121 122 下面以程式為例講一下PHP偽靜態的程式實作方法,其實這方法我之前已經有在其它論壇社區發過 123 124 程式為例: 125 程式為例: 125 /1,100,8630.html 127 128 CODE: 129 0.html 也就是執行腳本名稱後面的部分 131132 if(@$path_info =$ _SERVER["PATH_INFO"]){ 133 //正規比對參數 134 si",$path_info,$arr_path)){ 135 $gid =intval($arr_path[1]); //取得值1 100 137 $softid =intval($arr_path[3]); //取得金額8630 138 php?gid=1&sid =100&softid=8630 140 //就是這麼簡單了。 143 二 將#LoadModule rewrite_module modules/mod_rewrite前面的#去掉 144 三在 httpd.conf 146 RewriteEngine On
147 #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html
148 RewriteRule ^(..*?(sindex:index(.. ]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2
149
150 步驟 IfModule>之間新增:
151 RewriteMap tolowercase int:tolower
152 RewriteCond %{QUERY_STRING
152 RewriteCond %{QUERY_STRING152 RewriteCond %{QUERY_STRING
152 RewriteCond %{QUERY_STRINGING| page 153 RewriteRule ^(.* (?:index|dispbbs)).asp 1.php?{tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1
154 五、
157 function mod_rewrite(){
158 global
159 $ _GET;
159 $ _GET;
161 $script_name=$ _SERVER["SCRIPT_NAME"];
162 $nav= substr(ereg_replace("^$script_name","",urldecode($nav)),1);
163 $nav=preg_replace("/^.ht(m){1}(l){0,1$nav=preg_replace("/^.ht(m){1}(l){0,1} $/","",$nav);//這句是去掉尾部的.html或.htm
164 $vars = explode("/",$nav);
165 $i 166 $ _GET["$vars[$i]"]=$vars[$i+1]; 167 } 168 return $ _GET ; 169 } 170 mod_rewrite(); 171 mod $yearn=$$ 5070 是 $action=$ _GET["action"];//結果為'_add' 173 echo $yearn; 174 echo $action;
}
190 mod_rewrite();
191 $yearn= $ _GET["year"];//結果為'2006'
192 $action=$ _GET["action"];//結果為'_add'
193 $action;
195 很多情況下,某個IP 的訪問很容易造成CPU 100% (例如某些搜尋引擎的固定抓取,別人大量的採集站點),這個時候我們就要利用一些有效的手段封掉對方的IP ,讓他無法消耗伺服器的資源,封IP 的方法有很多種,如果你的Web 伺服器安裝了Rewrite 模組的話,也可以試試利用Rewrite 規則封掉對方的IP。
196 1、例如我們直接將某個特定的IP 重新導向到baidu 首頁,在網站根目錄的.htaccess 檔案中加入程式碼:
197 RewriteCond % 123.123.123.13.123. http://www.baidu.com/$1 [R=301] 將123.123.123.123 這個IP 替換成您要限制的IP 即可
198 2、如果要實現多個IP ,可以這樣寫: 5199 RewriteCond % 123.123.123.123 [OR]RewriteCond % 124.124.124.124 [NC]RewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301]內容,更多相關內容請關注PHP中文網(www.php.cn)!