Apache配置rewrite

时间:2023-03-08 17:52:25

最近将代码做了迁移,更换了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 ^/(.*) $.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index.php

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

4、调试rewrite配置的办法

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

RewriteLog "/data1/rewrite.log"
RewriteLogLevel

修改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、环境变量

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:59;
mso-style-unhide:no;
border:solid black 1.0pt;
mso-border-alt:solid black .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid black;
mso-border-insidev:.5pt solid black;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

环境变量名称

示例

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.

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}