🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 简述 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 模块时.