【Apache运维基础(4)】Apache的Rewrite攻略(1)

栏目: 服务器 · 发布时间: 6年前

内容简介:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virt

简述

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 模块时.

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Impractical Python Projects

Impractical Python Projects

Lee Vaughan / No Starch Press / 2018-11 / USD 29.95

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具