Apache配置rewrite

    最近将代码做了迁移,更换了web服务器,从原来的Nginx,换成使用Apache,多少有些区别。这里整理一下在apache下实现rewrite功能。

 

第一部分:修改apache配置文件支持rewrite

1、apache加载rewrite模块

LoadModule rewrite_module modules/mod_rewrite.so

 

2、支持Options FollowSymLinks

   在之前配置将原本的Options FollowSymLinks修改为Options None是为了避免列出apache的目录。

    <Directory "/data1/wap/htdocs/stat">
        Options FollowSymLinks #Options None    
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

      在配置实现rewrite中,如果不使用Options FollowSymLinks,在查看错误日志,会发现报如下错误
    Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden

 

3、配置rewrite

    a、在linux文件目录下生成.htaccess文件配置rewrite, 如下    

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/(.*) $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index.php


    b、修改apache配置文件,配置rewrite规则

4、调试rewrite配置的办法

    在配置文件增加如下配置,即可查看rewrite日志 

RewriteLog "/data1/rewrite.log"
RewriteLogLevel 9

 

修改apache的配置文件需要重启一下web服务,重启后,如果采用.htaccess文件修改规则的方式。在修改.htaccess文件无需重启web服务

第二部分: rewrite配置规则总结

 1、Apache Rewrite规则修正符

1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联

如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求
10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1

2、RewriteCond标志符

做判断使用,例如 RewriteCond %{REQUEST_FILENAME} -f 判断文件是否存在

3、RewriteRule标志符

执行跳转的准则

4、环境变量

环境变量名称

示例

HTTP_USER_AGENT

 

HTTP_REFERER

 

HTTP_COOKIE

 

HTTP_FORWARDED

 

HTTP_HOST

 

HTTP_PROXY_CONNECTION

 

HTTP_ACCEPT

 

DOCUMENT_ROOT

 

SERVER_ADMIN

 

SERVER_NAME

 

SERVER_ADDR

 

SERVER_PORT

 

SERVER_PROTOCOL

HTTP/1.1

SERVER_SOFTWARE

Apache/2.2.11 (Win32) PHP/5.2.9-1

 

 

REMOTE_ADDR

正在浏览当前页面用户的 IP 地址

REMOTE_HOST

正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR

REMOTE_PORT

用户连接到服务器时所使用的端口

REMOTE_USER

 

REMOTE_IDENT

 

REQUEST_METHOD

 

SCRIPT_FILENAME

/webRoot/t/share77.html

PATH_INFO

 

QUERY_STRING

 

AUTH_TYPE

 

 

 

TIME_YEAR

 

TIME_MON

 

TIME_DAY

服务器获取当前的日值

TIME_HOUR

 

TIME_SEC

服务器获取当前时间的秒

TIME_MIN

 

TIME

服务器获取当前的时间, 格式为: 年月日时分秒

 

 

API_VERSION

apache API 版本信息

REQUEST_URI

浏览器请求的资源信息.

REQUEST_FILENAME

被请求的资源的在磁盘的物理地址

IS_SUBREQ

如果是 sub-request 则显示为 true, 否则为 false.

 

 

 

 

posted @ 2014-10-21 13:23  壹木人  阅读(443)  评论(0编辑  收藏  举报