首頁 >php教程 >PHP开发 >Apache的URL位址重寫

Apache的URL位址重寫

黄舟
黄舟原創
2016-12-21 11:21:212581瀏覽

第一種方法: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    在段最後加入   

058    

059    RewriteEngine on    

060    RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT]    

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 也就是執行腳本名稱後面的部分   

131    

132    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_STRING

152    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;    

🠎175 6? 

177    function mod_rewrite(){    

178    global $ _GET;    

179    T;    

179    $ _SERVER["REQUEST_URI"]; ;    

182    $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//這句是去掉尾部的.html或.htm    

183    $vars = explode("/",$nav);    

184    for($i=0;$i

185    $ _GET[" $vars[$i]"]=$vars[$i+1];    

186    }    

187    return    

}   

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)! 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn