资讯专栏INFORMATION COLUMN

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

shixinzhang / 3685人阅读

摘要:简述主要的功能就是实现的跳转,它的正则表达式是基于语言。可基于服务器级的和目录级的两种方式。否则里没有它里面的规则也不会生效。基于目录级的要注意一点那就是必须打开此目录的属性且在里要声明。

简述

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]不区分大小写


    ServerAdmin Example.com
    DocumentRoot /var/www/html
    ServerName 192.168.1.22
    ErrorLog logs/error_log
    CustomLog logs/access_log common
    
        RewriteEngine On
        RewriteRule (.*).py$ http://192.168.1.22/$1.php #rewrite规则
    

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36016.html

相关文章

  • Apache运维基础(5)】ApacheRewrite攻略(2).htaccess文件

    摘要:作为用户,所能使用的命令受到限制。启用,需要修改,启用,并可以用限制特定命令的使用。如果需要使用以外的其他文件名,可以用指令来改变。例如,需要使用,则可以在服务器配置文件中按以下方法配置。 简述 .htaccess文件(或者分布式配置文件)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令...

    shengguo 评论0 收藏0
  • 【nginx运维基础(6)】NginxRewrite语法详解

    概述 重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力;而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接;它还可以提高你的网站的安全性;而且通常会让你的网站更加便于使用和更专业。 Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中r...

    Yang_River 评论0 收藏0

发表评论

0条评论

shixinzhang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<