## 簡述
Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基于Perl語言。可基于服務器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。
基于服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規則也不會生效。
**基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。**
## 配置方法
1.修改Apache主配置文件
刪除LoadModule rewrite_module modules/mod_rewrite.so前#
2.想通過.htaccess也能設置Rewrite規則
將網站目錄配置段的"AllowOverride"改成"All",不同的虛擬機要單獨配置
3.配置項解析
RewriteEngine On|Off
是否開啟Rewire功能
Rewrite功能不會繼承,多個虛擬機要單獨設置
## ReWriteRule規則
設置Rewrite重寫規則,**一般寫在.htaccess里面,放在根目錄;.htaccess不用重啟Apache;**
原子組的引用\$1,\$2...
[L]為休止符,每個L為一個段落
[NC]不區分大小寫
<VirtualHost 192.168.1.22:80>
ServerAdmin Example.com
DocumentRoot /var/www/html
ServerName 192.168.1.22
ErrorLog logs/error_log
CustomLog logs/access_log common
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*)\.py$ http://192.168.1.22/$1.php #rewrite規則
</IfModule>
</VirtualHost>
## RewriteCond
Rewrite重寫條件,如果條件不滿足,放棄RewriteRule規則匹配,除非設置RewriteCond條件時加[OR]標記
用%{} 來輸出Apache變量
```
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] #如果請求的是圖片;
```
## Apache Rewrite 服務器變量介紹
### 第一部分: HTTP headers 部分參數
參數名稱: HTTP_USER_AGENT
樣例參考值: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.8)
Gecko/2009032609 Firefox/3.0.8
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_USER_AGENT"]
參數名稱: HTTP_REFERER
樣例參考值: http://www.test.cn/test.php
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_REFERER"]
參數名稱: HTTP_COOKIE
樣例參考值: ZDEDebuggerPresent=php,phtml,php3
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_COOKIE"]
參數名稱: HTTP_FORWARDED
樣例參考值: 如果使用代理服務器的話會是代理服務器的IP地址, 本地不容易搭環境測試出值來.
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_FORWARDED"]
參數名稱: HTTP_HOST
樣例參考值: www.test.com
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_HOST"]
參數名稱: HTTP_PROXY_CONNECTION
樣例參考值: 網絡連接代理方面的信息. 和HTTP_FORWARDED參數一樣. 本地不容易搭環境測 試出值來.
說明: PHP中貌似未提供這樣的服務器信息值. 如果又的話可能等值于: $_SERVER["HTTP_PROXY_CONNECTION"]
參數名稱: HTTP_ACCEPT
樣例參考值: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
說明: 相當于PHP中的服務器參數: $_SERVER["HTTP_ACCEPT"]
### 第二部分: server internals 部分參數
參數名稱: DOCUMENT_ROOT
樣例參考值: C:/webRoot/t
說明: 相當于PHP中的服務器參數:$_SERVER["DOCUMENT_ROOT"]
參數名稱: SERVER_ADMIN
樣例參考值: youemailaddress@gmail.com
說明: 相當于PHP中的服務器參數:$_SERVER["SERVER_ADMIN"]
參數名稱: SERVER_NAME
樣例參考值: www.test.com
說明: 相當于PHP中的服務器參數: $_SERVER["SERVER_NAME"]
參數名稱: SERVER_ADDR
樣例參考值: 127.0.0.1
說明: 相當于PHP中的服務器參數: $_SERVER["SERVER_ADDR"]
參數名稱: SERVER_PORT
樣例參考值: 80
說明: 相當于PHP中的服務器參數: $_SERVER["SERVER_PORT"]
參數名稱: SERVER_PROTOCOL
樣例參考值: HTTP/1.1
說明: 相當于PHP中的服務器參數: $_SERVER["SERVER_PROTOCOL"]
參數名稱: SERVER_SOFTWARE
樣例參考值: Apache/2.2.11 (Win32) PHP/5.2.9-1
說明: 相當于PHP中的服務器參數: $_SERVER["SERVER_SOFTWARE"]
### 第三部分: connection & request 部分參數
參數名稱: REMOTE_ADDR
樣例參考值: 127.0.0.1 正在瀏覽當前頁面用戶的 IP 地址。
說明: 相當于PHP中的服務器參數:$_SERVER["REMOTE_ADDR"]
參數名稱: REMOTE_HOST
樣例參考值: 127.0.0.1 正在瀏覽當前頁面用戶的主機名。反向域名解析基于該用戶的REMOTE_ADDR
說明: 相當于PHP中的服務器參數: $_SERVER["REMOTE_HOST"]
參數名稱: REMOTE_PORT
樣例參考值: 2574 (變化的值)用戶連接到服務器時所使用的端口
說明: 相當于PHP中的服務器參數: $_SERVER["REMOTE_PORT"]
參數名稱: REMOTE_USER
樣例參考值: 空
說明: PHP 好像未提供相關的$_SERVER值.
參數名稱: REMOTE_IDENT
樣例參考值: 空
說明: PHP 好像未提供相關的$_SERVER值.
參數名稱: REQUEST_METHOD
樣例參考值: GET
說明: 相當于PHP中的服務器參數:$_SERVER["REQUEST_METHOD"]
參數名稱: SCRIPT_FILENAME
樣例參考值: C:/webRoot/t/share77.html
說明: 相當于PHP中的服務器參數:$_SERVER["SCRIPT_FILENAME"]
參數名稱: PATH_INFO
樣例參考值: 空
說明: 相當于PHP中的服務器參數: $_REQUEST["PATH_INFO"]
參數名稱: QUERY_STRING
樣例參考值: a=b&c=d&e=f
說明: 相當于PHP中的服務器參數: $_SERVER["QUERY_STRING"]
參數名稱: AUTH_TYPE
樣例參考值: 空 當 PHP 運行在 Apache 模塊方式下,并且正在使用 HTTP 認證功能,這個是認證的類型。
說明: 相當于PHP中的服務器參數: $_SERVER["AUTH_TYPE"]
### 第四部分: date and time 部分參數
參數名稱: TIME_YEAR
樣例參考值: 2009
說明: 服務器獲取當前的年份值
參數名稱: TIME_MON
樣例參考值: 04
說明: 服務器獲取當前的月份值
參數名稱: TIME_DAY
樣例參考值: 22
說明: 服務器獲取當前的日值
參數名稱: TIME_HOUR
樣例參考值: 16
說明: 服務器獲取當前時間的小時
參數名稱: TIME_MIN
樣例參考值: 26
說明: 服務器獲取當前時間的分鐘
參數名稱: TIME_SEC
樣例參考值: 34
說明: 服務器獲取當前時間的秒
參數名稱: TIME_WDAY
樣例參考值: 3
說明: 服務器獲取當天是星期幾, 從星期日-星期六, 數字從 0-6
參數名稱: TIME
樣例參考值: 20090422162634
說明: 服務器獲取當前的時間, 格式為: 年月日時分秒
### 第五部分: specials 部分參數
參數名稱: API_VERSION
樣例參考值: 20051115:21
說明: apache 的 API 版本信息.
參數名稱: THE_REQUEST
樣例參考值: GET /share77.html HTTP/1.1
說明: 瀏覽器發給服務器的請求值. 不包括其他的頭信息.
參數名稱: REQUEST_URI
樣例參考值: /share77.html
說明: 瀏覽器請求的資源信息.
參數名稱: REQUEST_FILENAME
樣例參考值: C:/webRoot/t/share77.html
說明: 被請求的資源的在磁盤的物理地址.
參數名稱: IS_SUBREQ
樣例參考值: false
說明: 如果是 sub-request 則顯示為 true, 否則為 false.
參數名稱: HTTPS
樣例參考值: off
說明: 如果連接使用 SSL/TLS 模式, 則值為on , 否則值為off, 這個參數比較安全, 即使未載入 mod_ssl 模塊時.
- Apache
- 【Apache運維基礎(1)】Apache的安裝與使用
- 【Apache運維基礎(2)】主配置文件說明
- 【Apache運維基礎(3)】虛擬主機配置說明
- 【Apache運維基礎(4)】Apache的Rewrite攻略(1)
- 【Apache運維基礎(5)】Apache的Rewrite攻略(2).htaccess文件
- 【Apache運維基礎(6)】Apache的日志管理與分析
- 工具篇
- supervisor進程管理器
- Haproxy安裝與配置
- Nginx
- 【nginx網站性能優化篇(1)】gzip壓縮與expire瀏覽器緩存
- 【nginx網站性能優化篇(2)】反向代理實現Apache與Nginx的動靜分離(LNMPA)
- 【nginx網站性能優化篇(3)】反向代理實現負載均衡
- 【nginx網站性能優化篇(4)】理解nginx的高并發原理及其配置調優
- 【nginx運維基礎(1)】Nginx的編譯安裝與使用
- 【nginx運維基礎(2)】Nginx的配置文件說明及虛擬主機配置示例
- 【nginx運維基礎(3)】Nginx的編譯PHP
- 【nginx運維基礎(4)】Nginx的日志管理(日志格式與定時分割日志)
- 【nginx運維基礎(5)】Nginx的location攻略
- 【nginx運維基礎(6)】Nginx的Rewrite語法詳解
- 【nginx運維基礎(7)】配置SSL支持https訪問
- 【nginx運維基礎(8)】配置支持http2協議
- 【nginx運維基礎(9)】了解PHP-FPM 與 Nginx 的通信機制
- 其它
- Apache與Nginx下php隱藏http頭部版本信息的實現方法
- CURL與PHP-CLI的應用【CLI篇】
- CURL與PHP-CLI的應用【Curl篇】
- Linux之SAMBA共享服務
- 【Linux常識篇(1)】所謂的正向代理與反向代理
- 【Linux常識篇(2)】理解inode
- 【Linux常識篇(3)】文件及文件夾的ctime atime mtime的含義詳解
- centOS使用手記
- 服務器日志分析
- 高頻命令
- df
- mv
- gzip
- cp
- tar
- touch
- cat
- uniq
- nl
- more
- rmdir
- less
- mkdir
- head
- rm
- tail
- 五大查詢命令
- vi&vim
- ls與目錄結構
- grep
- awk
- sed
- 其他高頻命令