Apache中rewrite偽靜態(tài)規(guī)則介紹
Rewirte主要的功能就是實(shí)現(xiàn)URL的跳轉(zhuǎn),它的正則表達(dá)式是基于Perl語言。可基于服務(wù)器級(jí)的(httpd.conf)和目錄級(jí)的(.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時(shí)候就直接安裝rewrite模塊,別一種是編譯apache時(shí)以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊
基于服務(wù)器級(jí)的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會(huì)舉例說明,需要注意的是,必須在每個(gè)virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規(guī)則也不會(huì)生效。
基于目錄級(jí)的(.htaccess),要注意一點(diǎn)那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。
實(shí)戰(zhàn)
例子:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
RewriteRule ^.* - [F,L] 這里”-”表示沒有替換,瀏覽器為IE和Opera的訪客將被禁止訪問。
例子:
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ([^/]+)$ /test/$1.php
#for example: /test/admin => /test/admin.php
RewriteRule ([^/]+).html$ /test/$1.php [L]
#for example: /test/admin.html => /test/admin.php
使用Apache的URL Rewrite配置多用戶虛擬服務(wù)器
要實(shí)現(xiàn)這個(gè)功能,首先要在DNS服務(wù)器上打開域名的泛域名解析(自己做或者找域名服務(wù)商做)。比如,我就把 *.kiya.us和 *.kiya.cn全部解析到了我的IP地址70.40.213.183上。
然后,看一下我的Apache中關(guān)于*.kiya.us的虛擬主機(jī)的設(shè)定。
ServerAdmin webmaster@kiya.us
DocumentRoot /home/www/111cn.net
ServerName dns.kiya.us
ServerAlias dns.kiya.us kiya.us *.kiya.us
CustomLog /var/log/httpd/osa/access_log.log” common
ErrorLog /var/log/httpd/osa/error_log.log”
AllowOverride None
Order deny,allow
#AddDefaultCharset GB2312
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/111cn.net/sylvan$3?un=$1&%{QUERY_STRING} [L]
在這段設(shè)定中,我把*.kiya.cn和*.kiya.us 的Document Root都設(shè)定到了 /home/www/111cn.net
限制目錄只能顯示圖片
< IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^.*.(gif|jpg|jpeg|png|swf)$
RewriteRule .*$ - [F,L]
< /IfModule>
RewriteRule規(guī)則表達(dá)式的說明:
. 匹配任何單字符
[chars] 匹配字符串:chars
[^chars] 不匹配字符串:chars
text1|text2 可選擇的字符串:text1或text2
? 匹配0到1個(gè)字符
* 匹配0到多個(gè)字符
+ 匹配1到多個(gè)字符
^ 字符串開始標(biāo)志
$ 字符串結(jié)束標(biāo)志
n 轉(zhuǎn)義符標(biāo)志
反向引用 $N 用于 RewriteRule 中匹配的變量調(diào)用(0 <= N <= 9)
反向引用 %N 用于 RewriteCond 中最后一個(gè)匹配的變量調(diào)用(1 <= N <= 9)
RewriteCond適用的標(biāo)志符
‘nocase|NC’ (no case)忽略大小
‘ornext|OR’ (or next condition)邏輯或,可以同時(shí)匹配多個(gè)RewriteCond條件
RewriteRule適用的標(biāo)志符
‘redirect|R [=code]’ (force redirect)強(qiáng)迫重寫為基于http開頭的外部轉(zhuǎn)向(注意URL的變化) 如:[R=301,L]
‘forbidden|F’ (force URL to be forbidden)重寫為禁止訪問
‘proxy|P’ (force proxy)重寫為通過代.理訪問的http路徑
‘last|L’ (last rule)最后的重寫規(guī)則標(biāo)志,如果匹配,不再執(zhí)行以后的規(guī)則
‘next|N’ (next round)循環(huán)同一個(gè)規(guī)則,直到不能滿足匹配
‘chain|C’ (chained with next rule)如果匹配該規(guī)則,則繼續(xù)下面的有Chain標(biāo)志的規(guī)則。
‘type|T=MIME-type’ (force MIME type)指定MIME類型
‘nosubreq|NS’ (used only if no internal sub-request)如果是內(nèi)部子請(qǐng)求則跳過
‘nocase|NC’ (no case)忽略大小
‘qsappend|QSA’ (query string append)附加查詢字符串
‘noescape|NE’ (no URI escaping of output)禁止URL中的字符自動(dòng)轉(zhuǎn)義成%[0-9]+的形式。
‘passthrough|PT’ (pass through to next handler)將重寫結(jié)果運(yùn)用于mod_alias
’skip|S=num’ (skip next rule(s))跳過下面幾個(gè)規(guī)則
‘env|E=VAR:VAL’ (set environment variable)添加環(huán)境變量
Apache mod_rewrite規(guī)則重寫的標(biāo)志一覽
1) R[=code](force redirect) 強(qiáng)制外部重定向
強(qiáng)制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省的302 HTTP狀態(tài)碼。
2) F(force URL to be forbidden)禁用URL,返回403HTTP狀態(tài)碼。
3) G(force URL to be gone) 強(qiáng)制URL為GONE,返回410HTTP狀態(tài)碼。
4) P(force proxy) 強(qiáng)制使用代理轉(zhuǎn)發(fā)。
5) L(last rule) 表明當(dāng)前規(guī)則是最后一條規(guī)則,停止分析以后規(guī)則的重寫。
6) N(next round) 重新從第一條規(guī)則開始運(yùn)行重寫過程。
7) C(chained with next rule) 與下一條規(guī)則關(guān)聯(lián)
如果規(guī)則匹配則正常處理,該標(biāo)志無效,如果不匹配,那么下面所有關(guān)聯(lián)的規(guī)則都跳過。
8) T=MIME-type(force MIME type) 強(qiáng)制MIME類型
9) NS (used only if no internal sub-request) 只用于不是內(nèi)部子請(qǐng)求
10) NC(no case) 不區(qū)分大小寫
11) QSA(query string append) 追加請(qǐng)求字符串
12) NE(no URI escaping of output) 不在輸出轉(zhuǎn)義特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 將能正確的將/foo/zoo轉(zhuǎn)換成/bar?arg=P1=zoo
13) PT(pass through to next handler) 傳遞給下一個(gè)處理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 將會(huì)交給/def規(guī)則處理
Alias /def /ghi
14) S=num(skip next rule(s)) 跳過num條規(guī)則
15) E=VAR:VAL(set environment variable) 設(shè)置環(huán)境變量
相關(guān)文章

集成系統(tǒng)級(jí)Claw模式! Deepin 官宣發(fā)布 25.1 版本
deepin操作系統(tǒng)發(fā)布了最新的 25.1 版本更新,該版本基于 deepin 25 正式版積累的多輪內(nèi)測(cè)成果,在 AI 能力、內(nèi)核版本、桌面環(huán)境、文件管理器以及系統(tǒng)安全等方面進(jìn)行了更新2026-04-13
又一代老硬件退場(chǎng)! Linux 內(nèi)核正式放棄Intel 486 CPU
在過去的幾十年間,CPU 的架構(gòu)已經(jīng)經(jīng)歷了飛速發(fā)展,x86 系列就是其中之一,而 i486 則屬于該系列中的一個(gè),當(dāng)前,i486 的CPU處理器已經(jīng)夠老,從 Linux 7.1 開始將不再有對(duì)2026-04-09
趕緊收藏! 全網(wǎng)最全 Linux 命令總結(jié)
我把 Linux 中最常用、最實(shí)用、最常被問到的命令按照實(shí)際使用場(chǎng)景分類整理,方便你快速查閱和記憶,內(nèi)容覆蓋日常運(yùn)維、開發(fā)調(diào)試、性能分析、文件處理、網(wǎng)絡(luò)、安全、系統(tǒng)管2026-04-08
一分鐘內(nèi)檢查L(zhǎng)inux服務(wù)器性能? 9個(gè)性能檢測(cè)常用的基本命令
今天我們來看看Linux系統(tǒng)中用于性能監(jiān)控的一系列命令,這些命令可以快速查看機(jī)器的負(fù)載情況,詳細(xì)請(qǐng)看下文介紹2026-03-18
從零基礎(chǔ)到精通! 適合高級(jí)用戶的15款Linux發(fā)行版推薦
Linux作為操作系統(tǒng)領(lǐng)域靈活性和可定制性的基石,提供了大量滿足不同用戶需求的發(fā)行版,今天分享適合高級(jí)用戶的15款Linux發(fā)行版2026-03-10
開箱即用? 這4個(gè)高手級(jí)Linux發(fā)行版遠(yuǎn)沒你想象的那么安全易用
如果你正在糾結(jié)用哪個(gè)發(fā)行版?零基礎(chǔ)新手別被“高端”“極客”“聲明式”這些詞沖昏頭腦,先用好用的,再慢慢進(jìn)階2026-03-10
這幾款SSH工具真的夠用了! Linux好用的ssh工具推薦
在Linux上使用SSH,您需要安裝一個(gè)SSH客戶端,今天整理找到的8 款 SSH / 終端工具,從免費(fèi)開源到企業(yè)級(jí)商用,從輕量化命令行到一站式工具箱,每款都做了介紹與對(duì)比,希望能2026-03-09
在Linux系統(tǒng)下有兩種用戶,即高級(jí)用戶root,普通用戶,高級(jí)用戶root可以在系統(tǒng)中做任何事情,普通用戶僅可在Linux系統(tǒng)中做有限的事情,下面我們就來看看切換方法2026-02-28
揭秘當(dāng)前登錄用戶的身份! Linux中使用logname命令的技巧
logname命令就是這樣一個(gè)簡(jiǎn)單但強(qiáng)大的工具,它能幫助我們輕松獲取當(dāng)前登錄用戶的用戶名,今天,我們就來深入探索一下這個(gè)命令的工作原理、使用方法和最佳實(shí)踐2026-02-26
在 Linux 系統(tǒng)中,DNS 緩存是一種將域名和 IP 地址映射關(guān)系緩存在本地的機(jī)制,可以加快域名解析速度,并減輕 DNS 服務(wù)器的負(fù)載2026-02-26



