1. 程式人生 > >Apache 重定向配置方法

Apache 重定向配置方法

今天的support內容需要測試Apache 頁面重定向,簡單的說就是配置Apache讓它自動把舊的URL地址轉換成新的URL輸出。 

  • 首先,apache重定向功能需要呼叫mod_rewrite模組,由於apache2.2的modules資料夾中帶有該模組,所以我們只需開啟http.conf檔案中的LoadModule rewrite_module modules/mod_rewrite.so(去掉前面的‘#’就可以了)。

 Apache模組 mod_rewrite說明

說明: 提供了一個基於規則的實時轉向URL請求的引擎
狀態: Extension
模組名: rewrite_module
原始檔: mod_rewrite.c
相容性: 包含在Apache 1.3及其更新版本中
      
  • 修改http.conf檔案,追加以下程式碼:
#開啟Rewrite模組
RewriteEngine on  
#設定Log的輸出位置()
RewriteLog 
"F:/local/apache2.2/logs/rewrite.log"
  
#舉例:替換page.jsp?id
=
$       
RewriteRule ^/page.jsp$ http://localhost/webadmin/index.jsp 
[L]

常用指令:

  • RewriteBase

語法:RewriteBase URL-path

RewriteBase指令顯式地設定了目錄級重寫的基準URL。預設值是,RewriteBase physical-directory-path在對一個新的URL進行替換時,此模組必須把這個URL重新注入到伺服器處理中。 為此,它必須知道其對應的URL字首或者說URL基準。通常,此字首就是對應的檔案路徑。 但是,大多數網站URL不是直接對應於其物理檔案路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來指定正確的URL字首。

RewriteEngine On

#  let the server know that we were reached via /xyz and not
#  via the physical path prefix /abc/def
RewriteBase   /xyz

 語法:RewriteCond TestString CondPattern

RewriteCond指令定義了一個規則的條件,即,在一個指令之前有一個或多個RewriteCond指令。 條件之後的重寫規則僅在當前URI與pattern匹配並且符合這些條件的時候才會起作用。

TestString是一個純文字的字串,但是還可以包含下列可擴充套件的成分。CondPattern是條件pattern, , 一個應用於當前例項TestString的正則表示式, , TestString將會被計算然後與CondPattern匹配.

RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
RewriteRule  ^/$                 /homepage.max.html  
[L]

RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  ^/$                 /homepage.min.html  
[L]

RewriteRule  ^/$                 /homepage.std.html  
[L]

 語法:RewriteEngine on|off

RewriteEngine指令開啟或關閉執行時刻的重寫引擎。 如果設定為off,則此模組不執行任何執行時刻的重寫操作, 甚至也不更新SCRIPT_URx環境變數。使用該指令可以使此模組無效,而無須註釋所有的指令!

注意:預設情況下,重寫配置是不可繼承的, 即,必須在每個需要的虛擬主機中設定一個RewriteEngine on指令。

語法:RewriteLog file-path

RewriteLog指令設定用於記錄所有重寫操作的檔案的名稱。 如果此檔名不是以斜槓('/')開頭,則它是相對於Server Root的。 此指令應該僅僅出現在伺服器級配置中。

如果要關閉對重寫操作的記錄,不推薦把Filename設定為/dev/null, 因為,雖然重寫引擎不能輸出記錄了,但仍會內部地建立這個日誌檔案, 它會使伺服器速度降低,而且對管理員毫無益處! 要關閉日誌,可以刪除或註解RewriteLog指令, 或者使用RewriteLogLevel 0! RewriteLog "/usr/local/var/apache/logs/rewrite.log" 

語法:RewriteLogLevel Level

RewriteLogLevel指令設定重寫引擎日誌的詳細程度的級別。 預設級別0意味著不記錄,而9或更大的值意味著記錄所有的操作。

要關閉重寫引擎日誌,可以簡單地設此值為0,關閉所有的重寫操作記錄。使用較高的Level值會使Apache伺服器速度急劇下降! 重寫日誌使用大於2的Level值只用於除錯!

RewriteLogLevel 3

語法:RewriteRule Pattern Substitution

RewriteRule指令是重寫引擎的根本。此指令可以多次使用。 每個指令定義一個簡單的重寫規則。這些規則的定義順序尤為重要, 因為,在執行時刻,規則是按這個順序逐一生效的.

Pattern是一個作用於當前URL的相容perl的正則表示式. 這裡的``當前''是指該規則生效時的URL的值。 它可能與被請求的URL不同,因為其他規則可能在此之前已經發生匹配並對它做了改動。

[flags]

  • 'redirect|R [=code]' (強制重定向 redirect)
    http://thishost[:thisport]/(使新的URL成為一個URI) 為字首的Substitution可以強制性執行一個外部重定向。 如果code沒有指定,則產生一個HTTP響應程式碼302(臨時性移動)。 如果需要使用在300-400範圍內的其他響應程式碼,只需在此指定這個數值即可, 另外,還可以使用下列符號名稱之一: temp (預設的), permanent, seeother. 用它可以把規範化的URL反饋給客戶端,, 重寫``/~''為 ``/u/'',或對/u/user加上斜槓,等等。

    注意: 在使用這個標記時,必須確保該替換欄位是一個有效的URL! 否則,它會指向一個無效的位置! 並且要記住,此標記本身只是對URL加上 http://thishost[:thisport]/的字首,重寫操作仍然會繼續。 通常,你會希望停止重寫操作而立即重定向,則還需要使用'L'標記.

  • 'forbidden|F' (強制URL為被禁止的 forbidden)
    強制當前URL為被禁止的,,立即反饋一個HTTP響應程式碼403(被禁止的)。 使用這個標記,可以連結若干RewriteConds以有條件地阻塞某些URL。
  • 'gone|G' (強制URL為已廢棄的 gone)
    強制當前URL為已廢棄的,,立即反饋一個HTTP響應程式碼410(已廢棄的)。 使用這個標記,可以標明頁面已經被廢棄而不存在了.
  • 'proxy|P' (強制為代理 proxy)
    此標記使替換成分被內部地強制為代理請求,並立即(, 重寫規則處理立即中斷)把處理移交給代理模組。 你必須確保此替換串是一個有效的(比如常見的以 http://hostname開頭的)能夠為Apache代理模組所處理的URI。 使用這個標記,可以把某些遠端成分對映到本地伺服器名稱空間, 從而增強了ProxyPass指令的功能。

    注意: 要使用這個功能,代理模組必須編譯在Apache伺服器中。 如果你不能確定,可以檢查``httpd -l''的輸出中是否有mod_proxy.c。 如果有,則mod_rewrite可以使用這個功能; 如果沒有,則必須啟用mod_proxy並重新編譯``httpd''程式。

  • 'last|L' (最後一個規則 last)
    立即停止重寫操作,並不再應用其他重寫規則。 它對應於Perl中的last命令或C語言中的break命令。 這個標記可以阻止當前已被重寫的URL為其後繼的規則所重寫。 舉例,使用它可以重寫根路徑的URL('/')為實際存在的URL, 比如, '/e/www/'.
  • 'next|N' (重新執行 next round)
    重新執行重寫操作(從第一個規則重新開始). 這時再次進行處理的URL已經不是原始的URL了,而是經最後一個重寫規則處理的URL。 它對應於Perl中的next命令或C語言中的continue命令。 此標記可以重新開始重寫操作,, 立即回到迴圈的頭部。
    但是要小心,不要製造死迴圈!
  • 'chain|C' (與下一個規則相連結 chained)
    此標記使當前規則與下一個(其本身又可以與其後繼規則相連結的, 並可以如此反覆的)規則相連結。 它產生這樣一個效果: 如果一個規則被匹配,通常會繼續處理其後繼規則, ,這個標記不起作用;如果規則不能被匹配, 則其後繼的連結的規則會被忽略。比如,在執行一個外部重定向時, 對一個目錄級規則集,你可能需要刪除``.www'' (此處不應該出現``.www''的)。
  • 'type|T=MIME-type' (強制MIME型別 type)
    強制目標檔案的MIME型別為MIME-type。 比如,它可以用於模擬mod_alias中的ScriptAlias指令, 以內部地強制被對映目錄中的所有檔案的MIME型別為``application/x-httpd-cgi''.
  • 'nosubreq|NS' (僅用於不對內部子請求進行處理 no internal sub-request)
    在當前請求是一個內部子請求時,此標記強制重寫引擎跳過該重寫規則。 比如,在mod_include試圖搜尋可能的目錄預設檔案(index.xxx)時, Apache會內部地產生子請求。對子請求,它不一定有用的,而且如果整個規則集都起作用, 它甚至可能會引發錯誤。所以,可以用這個標記來排除某些規則。

    根據你的需要遵循以下原則: 如果你使用了有CGI指令碼的URL字首,以強制它們由CGI指令碼處理, 而對子請求處理的出錯率(或者開銷)很高,在這種情況下,可以使用這個標記。

  • 'nocase|NC' (忽略大小寫 no case)
    它使Pattern忽略大小寫,, 在Pattern與當前URL匹配時,'A-Z' 和'a-z'沒有區別。
  • 'qsappend|QSA' (追加請求串 query string append)
    此標記強制重寫引擎在已有的替換串中追加一個請求串,而不是簡單的替換。 如果需要通過重寫規則在請求串中增加資訊,就可以使用這個標記。
  • 'noescape|NE' (在輸出中不對URI作轉義 no URI escaping)
    此標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。 一般情況下,特殊字元(如'%', '$', ';'等)會被轉義為等值的十六進位制編碼。 此標記可以阻止這樣的轉義,以允許百分號等符號出現在輸出中,如:

    RewriteRule /foo/(.*) /bar?arg=P1/%3d$1 [R,NE]

    可以使'/foo/zed'轉向到一個安全的請求'/bar?arg=P1=zed'.
  • 'passthrough|PT' (移交給下一個處理器 pass through)
    此標記強制重寫引擎將內部結構request_rec中的uri欄位設定為 filename欄位的值,它只是一個小修改,使之能對來自其他URI到檔名翻譯器的 AliasScriptAlias, Redirect 指令的輸出進行後續處理。舉一個能說明其含義的例子: 如果要通過mod_rewrite的重寫引擎重寫/abc/def, 然後通過mod_alias使/def轉變為/ghi,可以這樣:

    RewriteRule ^/abc(.*) /def$1 [PT]
    Alias /def /ghi

    如果省略了PT標記,雖然mod_rewrite運作正常, , 作為一個使用API的URI到檔名翻譯器, 它可以重寫uri=/abc/...filename=/def/..., 但是,後續的mod_alias在試圖作URI到檔名的翻譯時,則會失效。

    注意: 如果需要混合使用不同的包含URI到檔名翻譯器的模組時, 就必須使用這個標記。。 混合使用mod_aliasmod_rewrite就是個典型的例子。

    For Apache hackers

    如果當前Apache API除了URI到檔名hook之外,還有一個檔名到檔名的hook, 就不需要這個標記了! 但是,如果沒有這樣一個hook,則此標記是唯一的解決方案。 Apache Group討論過這個問題,並在Apache 2.0 版本中會增加這樣一個hook。
  • 'skip|S=num' (跳過後繼的規則 skip)
    此標記強制重寫引擎跳過當前匹配規則後繼的num個規則。 它可以實現一個偽if-then-else的構造: 最後一個規則是then從句,而被跳過的skip=N個規則是else從句. (它和'chain|C'標記是不同的!)
  • 'env|E=VAR:VAL' (設定環境變數 environment variable)
    此標記使環境變數VAR的值為VAL, VAL可以包含可擴充套件的反向引用的正則表示式$N%N。 此標記可以多次使用以設定多個變數。 這些變數可以在其後許多情況下被間接引用,但通常是在XSSI (via <!--#echo var="VAR"-->) or CGI ( $ENV{'VAR'})中, 也可以在後繼的RewriteCond指令的pattern中通過%{ENV:VAR}作引用。 使用它可以從URL中剝離並記住一些資訊。
  • 'cookie|CO=NAME:VAL:domain[:lifetime[:path]]' (設定cookie)
    它在客戶端瀏覽器上設定一個cookie。 cookie的名稱是NAME,其值是VALdomain欄位是該cookie的域,比如'.apache.org', 可選的lifetime是cookie生命期的分鐘數, 可選的path是cookie的路徑。

相關推薦

Apache 定向配置方法

今天的support內容需要測試Apache 頁面重定向,簡單的說就是配置Apache讓它自動把舊的URL地址轉換成新的URL輸出。  首先,apache重定向功能需要呼叫mod_rewrite模組,由於apache2.2的modules資料夾中帶有該模組,所以我們只需開啟

Apache URL定向配置專題

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

apache(.htaccess檔案)路由定向配置步驟

1.在專案根目錄資料夾下面新建.htaccess檔案(apache重寫); .htaccess檔案內容如下: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f Rewri

apache做301定向方法

一、建立一個301.php(檔名自取)1234567891011121314<?php$the_host = $_SERVER['HTTP_HOST'];//取得當前域名$the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI']

不帶www轉向帶www301定向方法apache+window環境

apache中我們以htaccess檔案為主。 我們現在就先來看一下如果通過修改htaccess檔案做301重定向,實現域名轉向 第一種方法: 將不帶www的頂級域名轉向帶www的二級域名: Options +FollowSymLinks  RewriteEn

IIS HTTP定向配置、參數設置

參考 方式 scripts 管理器 int 屬性 $0 目錄 必須 一、安裝HTTP 重定向 在安裝/卸載的打開和關閉windows功能中“Internet信息服務”\"萬維網服務"\“常見http功能”\"Http重定向"

htaccess apache定向學習

AI ade 測試 logs AR arc force arch 訪問 1.推薦博客:http://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html 2.測試工具:https://htaccess.madewit

vue巢狀路由與404定向實現方法分析

第一部分: vue巢狀路由 巢狀路由是什麼? 巢狀路由就是在一個被路由過來的頁面下可以繼續使用路由,巢狀也就是路由中的路由的意思。 比如在vue中,我們如果不使用巢狀路由,那麼只有一個<router-view>,但是如果使用,那麼在一個元件中就還有<router-view>,這也就構

php定向方法

方法一:    $url="shangchuan.php";         if (isset($url))        &nb

HttpServletResponse ServletResponse 返回響應 設定響應頭設定響應正文體 定向 常用方法 如何定向 響應編碼 響應亂碼

注意: 當然,如果響應正文內容為字元,那麼使用response.getWriter() 如果響應內容是位元組,那麼可以使用response.getOutputStream()  例如下載時 在一個請求中,不能同時使用這兩個流! 也就是說,要麼你使用repsonse.getWriter(),

利用OC物件的訊息定向forwardingTargetForSelector方法構建高擴充套件性的濾鏡功能

在OC中,當像一個物件傳送訊息,而物件找到訊息後,從它的類方法列表,父類方法列表,一直找到根類方法列表都沒有找到與這個選擇子對應的函式指標。那麼這個物件就會觸發訊息轉發機制。 OC物件的繼承鏈和isa指標鏈如圖:   訊息轉發流程如下: 1.先呼叫例項方法resolveInst

IIS伺服器下做301永久定向設定方法

實現方法如下:   1.新建一個站點,對應目錄如E:\wwwroot\301web。該目錄下只需要1個檔案,即index.html或者加個404.htm。繫結要跳轉的域名,如圖:   2.在IIS中選中剛才我們建立的站點,右鍵,屬性,主目錄,選擇重定向到,輸入網址如:http://www.xx

ecshop利用.htaccess實現301定向方法

實現方法如下(空間必須支援對目錄中的.htaccess檔案解析) 開啟 .htaccess 找到 RewriteEngine on 它的下方新增 RewriteCond %{HTTP_HOST} ^需要被轉向的網址$RewriteRule ^(.*)$ http://轉向後的網址/$1 [R=30

IIS 定向配置

IIS重定向 先說重點:  新舊站點無縫切換時,設定舊站點的HTTP重定向值為:http(https)://新站url(結尾不需要/)$S$Q 其中$s是訪問舊站點的URL中的路徑,$Q是URL中的?及後面的引數值 重定向客戶端請求是確保使用者得到正確頁面的一

Linux Apache虛擬主機配置方法

.html hostname onf -a cli 修飾 ls -l ant 瀏覽器    apache 虛擬主機配置 註意: 虛擬主機可以開很多個 虛擬主機配置之後,原來的默認/etc/httpd/httpd.conf中的默認網站就不會生效了 練習:

Struts2配置使用參數接收,轉發與定向,多方法,ognl使用與值傳遞,struts標簽使用

isp -name users .org 填充 導航 建模 尋址 XML 本文檔包括了 Struts2配置使用參數接收,轉發與重定向,多方法,ognl使用與值傳遞,struts標簽使用 (1)首先加入jar包(最小jar組合) (1) 在web.xml中註冊

apache+php完美解決301定向的兩種方法

<?php $the_host = $_SERVER['HTTP_HOST']; $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; switch ($the_host) { case "www.

apache httpclient 獲取定向之後的url方法

    public static void main(String[] args)     {         CloseableHttpClient httpclient = null;         CloseableHttpResponse response =

Apache配置.htaccess將主域名301定向到www域名

解決辦法 假設你的根域名為X,X代表如qq.com。 以X舉例: RewriteEngine On RewriteCond %{HTTP_HOST} ^X [NC] RewriteRule ^(.*)

springmvc 處理器方法返回的是modelandview 定向到頁面

ima src log images 1-1 分享 .cn png mage springmvc 處理器方法返回的是modelandview 重定向到頁面