简述

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运维基础(4)】Apache的Rewrite攻略(1)的更多相关文章

  1. 【Apache运维基础(1)】Apache的安装与使用

    安装 yum -y install httpd httpd-devel # 在Ubuntu里面叫做Apache2,输入localhost能打开就算成功了 额...当然专业的运维还是老老实实的去编译吧; ...

  2. 【Apache运维基础(5)】Apache的Rewrite攻略(2)

    简述 .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作 ...

  3. 【Apache运维基础(2)】主配置文件说明

    ServerTokens OS 系统信息,在访问出错时出现;把OS改为Minor,就不显示系统信息 ServerSignature On 把On改为Off就连普通的系统都给隐藏起来;改为Email就会 ...

  4. 写给自己看的Linux运维基础(二) - Apache/MySQL. 安全设置. 定时任务

    本文使用环境为CentOS 6 Apache, PHP, MySQL等常用软件均可通过yum安装包获取 yum install httpd php mysql-server # mysql: 客户端; ...

  5. 【Apache运维基础(3)】虚拟主机配置说明

    建议在主配置文件中增加一句 Include conf/vhosts/*.conf 然后就在vhosts目录下添加虚拟主机配置文件 在配置前打开NameVirtualHost *:80注释,注意此处要与 ...

  6. 【Apache运维基础(6)】Apache的日志管理与分析

    简述 Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间.地理位置分布.页面点击率等.Apache 的访问日志具有如下4个方面的作用: 记录访问服务器的远程 ...

  7. Linux系统运维基础测试题

    1    Linux运维基础测试题(第一关) 通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习. 1.1    习题 ...

  8. HBase运维基础--元数据逆向修复原理

    背景 鉴于上次一篇文章——“云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据”的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运维等等.总的来说,就是想更深层 ...

  9. Linux运维基础

    一.服务器硬件 二.Linux的发展史 三.Linux的系统安装和配置 四.Xshell的安装和优化 五.远程连接排错 六.Linux命令初识 七.Linux系统初识与优化 八.Linux目录结构 九 ...

随机推荐

  1. 推荐:一个个人开发者搞app赚钱之后的总结!有图有真相。

    2011年已经过去了,回顾2011有收获,更有许多不足.收获就是了却了一件人生大事(女儿出生),还有就是算入门了android并利用它开发 了一 款还算有些许收获的应用.不足的地方是单位工作上没有太好 ...

  2. 54.xilinx_modelsim仿真错误1

    在仿真DDR3核时,用modelsim编译时会出现下面错误 Error:can't read "env(XILINX)":no such variable 原因:在.do文件中指定 ...

  3. OC学习心得【适合初学者】

    一.类和对象 1.OC语言是C语言的扩充,并且OC是iOS和OS X操作系统的编程语言. ①具备完善的面向对象特性: 封装:将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内 继 ...

  4. SQL Server 2008 没有可用于 charge_sys_Log.LDF 的编辑器

    因为上网问题重新装了系统.今天在整 SQL Server  的时候出现了这样一个问题. 因为之前装 SQL Server  的时候没有遇到过这种情况,感觉很新奇.所以详细的记录一下,希望对别人能有一定 ...

  5. 在 mongodb 终端环境下写多行 javascript 代码、函数

    工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段.mongodb 终端下支持直接写 js 代码.函数,也可以运行 js 文件.1 首先需要设置 ...

  6. 评价正在使用输入法软件产品----QQ拼音输入法

    评价一下大家手头正在使用输入法或者搜索类的软件产品. 我现在使用的是系统自带的QQ拼音输入法,以前使用的是搜狗拼音输入法,后来发现可能由于我的系统重装过好几次,搜狗输入法也重装了好几次,而每次都删不干 ...

  7. WEB相关文件的加载顺序

    一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个Serv ...

  8. Careercup - Google面试题 - 5377673471721472

    2014-05-08 22:42 题目链接 原题: How would you split a search query across multiple machines? 题目:如何把一个搜索que ...

  9. PVPGN1.8.2 + D2GS1.11(38)搭建暗黑破坏神1.11b战网(配置指南)

    首先介绍一下PVPGN和D2GS,PVPGN是一个多人网络游戏平台,全称是(Player vs Player Gaming Network),它的前身是Bnetd.Bnetd由于吃到暴雪的官司败诉,最 ...

  10. 【POJ】【2699】The Maximum Number of Strong Kings

    网络流/最大流/二分or贪心 题目大意:有n个队伍,两两之间有一场比赛,胜者得分+1,负者得分+0,问最多有几只队伍打败了所有得分比他高的队伍? 可以想到如果存在这样的“strong king”那么一 ...