## 简述
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
- 其他高频命令