zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    BZOJ1800 fly 飞行棋 [几何]
    Cf #434 Div.1 D Wizard's Tour [构造题]
    Last mile of the way [树形dp+重链剖分]
    World Of Our Own [Lucas+思维题]
    vue 初级小总结
    转-redux-saga
    【转】react-native开发混合App-github开源项目
    react中路由的跳转
    Lodash 浓缩
    jq的attr、prop和data区别
  • 原文地址:https://www.cnblogs.com/yimuren/p/4040113.html
Copyright © 2011-2022 走看看