700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Apache的Rewrite知识点梳理(mod_rewrite RewriteCond RewriteRule)

Apache的Rewrite知识点梳理(mod_rewrite RewriteCond RewriteRule)

时间:2020-03-28 01:43:04

相关推荐

Apache的Rewrite知识点梳理(mod_rewrite RewriteCond RewriteRule)

使用到PHP的一些框架的时候,通常由index.php做统一路由,难免使用到Rewirte。做一些知识点的记录,忘记时,方便查阅。

Rewirte主要的功能就是实现URL的跳转,隐藏URL真实地址,可以帮助我们实现拟静态,拟目录,域名跳转,防止盗链,搜索引擎的收录等。

一、启用mod_rewrite模块

在Apache配置文件httpd.conf确保启用mod_rewrite模块

# LoadModule rewrite_module modules/mod_rewrite.so (去除前面的 #)

二、开启rewrite功能

1)使用.htaccess文件的方式

即在一个特定的目录中放置一个包含配置指令的.htaccess文件,其中的指令作用于此目录及其所有子目录。

http.conf文件,项目中配置AllowOverride All(允许重写apache默认配置),项目下的目录中的.htaccess文件规则才能起作用。

如:使用本地的8082端口,设定一个项目。

Listen 8082NameVirtualHost *:8082<VirtualHost *:8082>DocumentRoot "D:\wwwroot\test"ServerName *:8082<Directory "D:\wwwroot\test">Options Indexes FollowSymLinks Order allow,denyAllow from allAllowOverride all #允许重写apache默认配置</Directory></VirtualHost>

然后在D:\wwwroot\test下的.htaccess文件书写rewrite的规则。如:

<IfModule mod_rewrite.c>RewriteEngine On #开启 url rewrite# ...rewrite规则# ...rewrite规则# ...rewrite规则</IfModule>

PS:

AllowOverride 它只能在<Directory>中生效

弊端:

启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用。

其次,每一个项目都能进行apache的配置修改,安全性大大降低等。

http.conf文件,根目录的AllowOverride属性一般都配置成不允许任何Override

<Directory />AllowOverride none</Directory>

2)配置服务器的httpd.conf的方式

使用本地的8085端口,设定一个项目。

Listen 8085NameVirtualHost *:8085<VirtualHost *:8085>DocumentRoot "D:\wwwroot\test"ServerName *:8085<Directory "D:\wwwroot\test">Options Indexes FollowSymLinks Order allow,denyAllow from allRewriteEngine On #开启 url rewrite# ...rewrite规则# ...rewrite规则# ...rewrite规则</Directory></VirtualHost>

如有服务器的权限一般使用第二种方式

另外的知识点:

Options指令的主要作用是控制特定目录将启用哪些服务器特性。

详情:/page/apache-options-directive.htm

在Apache配置文件中,给指定目录设置基本的访问权限,主要是靠Allow、Deny、Order三个指令的配合使用来实现的。

详情:/page/apache-directory-access-control.htm

三、rewrite规则

对于Rewrite来说共有九个指令:RewriteEngine,RewriteBase, RewriteCond, RewriteLock, RewriteLog, RewriteLogLevel, RewriteMap, RewriteOptions, RewriteRule。通常最常用的是 RewriteEngine, RewriteCond, RewriteRule 三个指令。

RewriteEngine

这个是rewrite功能的总开关,用来开启是否启动url rewrite,使用就设置成 on, 否则设置成 off

RewriteCond 语法:RewriteCond TestString CondPattern [flags]

RewriteRule 语法:RewriteRule Pattern Substitution [flags]

首先得了解这个流程,如下官网的图

(图1)

(图2)

RewriteCond 和 RewriteRule 是上下对应的关系。可以有1个或者好几个RewriteCond来匹配一个RewriteRule

首先URL会与每条RewriteRule规则的模板pattern比较,当匹配失败时,立即停止对当前规则的处理进入下一条RewriteRule规则;当匹配成功时,寻找相关的RewriteCond条件;如果没有相关的RewriteCond条件,则直接执行RewriteRule规则中定义的替换,然后回到规则遍历的过程。如果有相关的RewriteCond条件,则启动一个内部循环,依次检查各个RewriteCond条件。

只要其中有RewriteCond条件匹配失败,则整个RewriteCond条件集且这个RewriteRule规则都不再执行,然后回到规则遍历中;如果所有的RewriteCond条件都满足,则执行RewriteRule规则中定义的替换动作。

RewriteCond和RewriteRule的规则写法(待整理)

参考:

/u013927110/article/details/41414091

/phper/note/73726

/qq_36031499/article/details/54317366

/archives/99

/lpy123456/article/details/1404714

官网

/docs/current/mod/mod_rewrite.html

/docs/2.0/mod/mod_rewrite.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。