URLRewrite 講解

weixin_34115824發表於2017-11-12

rlrewrite顧名思義,就是對URL進行重寫,使用者得到的全部都是經過處理後的URL地址,這樣做我覺得好處有三:
一:提高安全性,可以有效的避免一些引數名、ID等完全暴露在使用者面前,如果使用者隨便亂輸的話,不符合規則的話直接會返回個404或錯誤頁面,這比直接返回500或一大堆伺服器錯誤資訊要好的多
二:美化URL,去除了那些比如*.do之類的字尾名、長長的引數串等,可以自己組織精簡更能反映訪問模組內容的URL
三:更有利於搜尋引擎的收入,通過對URL的一些優化,可以使搜尋引擎更好的識別與收錄網站的資訊



Apache Rewrite的主要功能
就是實現URL的跳轉和隱藏真實地址,基於Perl語言的正規表示式規範。平時幫助我們實現擬靜態,擬目錄,域名跳轉,防止盜鏈等

2.Apache Rewrite的配置
Apache下的Rewrite配置主要有兩種,一種是針對整個apache伺服器的配置,此種配置的Rewrite規則是直接在httpd.conf下書寫。配置步驟如下:
(1)去除httpd.conf檔案中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"號;
(2)然後再在httpd.conf中書寫如下規則:
RewriteEngine on
#當訪問任何以t_開頭,以.html結尾的檔案時,將$1用與(.*)匹配的字元替換後,訪問相應的test.php頁面
RewriteRule ^/t_(.*).html$ /test.php?id=$1

另一種是針對apache伺服器下的某一目錄的配置,此種配置的Rewrite規則需在此目錄下建立一個.htaccess檔案來書寫。配置步驟如下:
(1)去除httpd.conf檔案中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"號;
(2)修改httpd.conf檔案中的"AllowOverride None"為"AllowOverride all",同時最好將Options也置為"all",否則可能會出問題。
(3)在目錄中建立.htaccess檔案,並用記事本開啟,書寫如下規則:
RewriteEngine on
RewriteRule ^/t_(.*).html$ /test.php?id=$1

3.Apache Rewrite規則的書寫
RewriteEngine on
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R]

RewriteEngine on
#當我們訪問的地址不是以www.163.com開頭的,那麼執行下一條規則
RewriteCond %{HTTP_HOST} !^www.163.com [NC]
RewriteRule ^/(.*) http://www.163.com/ [L]

4.Apache Rewrite規則修正符
1) R 強制外部重定向
2) F 禁用URL,返回403HTTP狀態碼。
3) G 強制URL為GONE,返回410HTTP狀態碼。
4) P 強制使用代理轉發。
5) L 表明當前規則是最後一條規則,停止分析以後規則的重寫。
6) N 重新從第一條規則開始執行重寫過程。
7) C 與下一條規則關聯

如果規則匹配則正常處理,以下修正符無效

8) T=MIME-type(force MIME type) 強制MIME型別
9) NS 只用於不是內部子請求
10) NC 不區分大小寫
11) QSA 追加請求字串
12) NE 不在輸出轉義特殊字元 \%3d$1 等價於 =$1 




=========================================================================

PHP程式設計如何通過Apache開啟URLRewrite


檢測Apache是否支援mod_rewrite
通過php提供的phpinfo()函式檢視環境配置,通過Ctrl+F查詢到“Loaded Modules”,其中列出了所有apache2handler已經開啟的模組,如果裡面包括“mod_rewrite”,則已經支援,不再需要繼續設定。 如果沒有開啟“mod_rewrite”,則開啟目錄 您的apache安裝目錄“/apache/conf/” 下的 httpd.conf 檔案,通過Ctrl+F查詢到“LoadModule rewrite_module”,將前面的”#”號刪除即可。
如果沒有查詢到,則到“LoadModule” 區域,在最後一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必選獨佔一行),然後重啟apache伺服器即可。 讓apache伺服器支援.htaccess
AllowOverride None改為Options FollowSymLinks
AllowOverride All
就可以了。 建立.htaccess 檔案
(1)用記事本開啟,點選檔案–另存為,在檔名視窗輸入”.htaccess”,注意是整個綠色部分,也就是包含英文引號,然後點選儲存就行了。
(2)進入cmd命令 視窗,通過cd切換當剛建立htaccess.txt檔案的資料夾,然後輸入命令:rename htaccess.txt .htaccess ,然後點選鍵盤Enter鍵即可。
(3)通過ftp連線htaccess.txt所在資料夾,通過ftp軟體重新命名。 rewrite規則學習
我們新建一個.htaccess檔案之後,就在裡面寫入以下內容:
RewriteEngine on #rewriteengine為重寫引擎開關on為開啟off為關閉
RewriteRule ([0-9]{1,})$ index.php?id=$1
我講解一下RewriteRule:RewriteRule是重寫規則,支援正規表示式的,上面的([0-9]{1,})是指由數字組成的,$是結束標誌,說明是以數字結束!
好吧,現在我們可以實現偽靜態頁面了,寫下一下的規則:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ index.php?action=$1&id=$2
</IfModule>
([a-zA-Z]{1,})-([0-9]{1,}).html$是規則,index.php?action=$1&id=$2是要替換的格式,$1代表第一個括號匹配的值,$2代表第二個,如此類推!!
我們寫一個處理的PHP指令碼:index.phpPHP程式碼<?phpecho ‘你的Action是:’ . $_GET['action'];
echo ‘<br/>’;
echo ‘你的ID是:’ . $_GET['id'];?>好了,我們現在在瀏覽器中輸入:
localhost/view-12.html輸出的是:你的Action是:view


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

參考:http://camel.apache.org/urlrewrite

    http://www.cnblogs.com/yeer/archive/2010/08/17/1801679.html

    http://www.blogjava.net/Jiangzy/archive/2008/02/01/178769.html


本文轉自 1inux 51CTO部落格,原文連結:http://blog.51cto.com/1inux/1640416

相關文章