Apache配置rewrite

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

 

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

一、apache加载rewrite模块linux

LoadModule rewrite_module modules/mod_rewrite.so

 

二、支持Options FollowSymLinks web

   在以前配置将本来的Options FollowSymLinks修改成Options None是为了不列出apache的目录。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浏览器

 

三、配置rewrite服务器

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

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


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

ide

四、调试rewrite配置的办法spa

    在配置文件增长以下配置,便可查看rewrite日志 

RewriteLog "/data1/rewrite.log"
RewriteLogLevel 9

 

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

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

 一、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

二、RewriteCond标志符

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

三、RewriteRule标志符

执行跳转的准则

四、环境变量

环境变量名称

示例

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.

相关文章
相关标签/搜索