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檔案,追加以下程式碼:
RewriteEngine on
#設定Log的輸出位置()
RewriteLog "F:/local/apache2.2/logs/rewrite.log"
#舉例:替換page.jsp?id=$
RewriteRule ^/page.jsp$ http://localhost/webadmin/index.jsp
常用指令:
- RewriteBase
語法:RewriteBase URL-path
RewriteBase指令顯式地設定了目錄級重寫的基準URL。預設值是,RewriteBase
physical-directory-path在對一個新的URL進行替換時,此模組必須把這個URL重新注入到伺服器處理中。 為此,它必須知道其對應的URL字首或者說URL基準。通常,此字首就是對應的檔案路徑。 但是,大多數網站URL不是直接對應於其物理檔案路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase
指令來指定正確的URL字首。
# let the server know that we were reached via /xyz and not
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的。 此指令應該僅僅出現在伺服器級配置中。
/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到檔名翻譯器的Alias
,ScriptAlias
,Redirect
等指令的輸出進行後續處理。舉一個能說明其含義的例子: 如果要通過mod_rewrite
的重寫引擎重寫/abc
為/def
, 然後通過mod_alias
使/def
轉變為/ghi
,可以這樣:
如果省略了RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghiPT
標記,雖然mod_rewrite
運作正常, 即, 作為一個使用API的URI到檔名翻譯器, 它可以重寫uri=/abc/...
為filename=/def/...
, 但是,後續的mod_alias
在試圖作URI到檔名的翻譯時,則會失效。注意: 如果需要混合使用不同的包含URI到檔名翻譯器的模組時, 就必須使用這個標記。。 混合使用
mod_alias
和mod_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,其值是VAL。 domain欄位是該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 重定向到頁面