大客户采购热线 010-57180806

apache rewrite模块的路径是匹配绝对路径还是相对路径?

文章封面,apache

在使用apachec重定向模块时,有这么一个语法:RewriteCond %{REQUEST_FILENAME} !-s,涉及到路径是用绝对路径还是相对路径的问题。 RewriteCond 究竟是判断相对路径还是绝对路径呢?阿里云北京分销商为您分享答案。

假如,用户访问网站的index.html页面,用apache判断index.html文件是否存在,如果不存在的话,转向index.php这个路径,
访问index.php路径是程序自动生成index.html文件,以后用户再次访问index.html文件时,直接访问index.html文件,实现网站自动静态化的功能。
但是在配置apache文件,及用apache判断文件是否存在时出现了问题。
http.conf文件添加
RewriteCond {REQUEST_FILENAME}   !-s
RewriteRule ^/a\.html$  /b.html   [L]
访问一直不对。就是访问a.html时,不管a.html文件是否存在,都访问b.html文件。
不论是百度,还是google都搜索不到。
在根目录下面建立.htaccess文件
RrwriteBase /
RewriteCond {REQUEST_FILENAME}   !-s
RewriteRule ^/a\.html$  /b.html   [L]
访问文件时可以实现需要的功能。
那么我们开启apache的重写日志研究一下。
在http.conf文件添加
RewriteLog logs/rewrite.log
然后测试第一种情况
日志如下:
localhost – – [2019-06-20 :16:53:07 +0800] [www.a.com/sid#7b0770][rid#9e8030/initial] (2) init rewrite engine with requested uri /a.html
localhost – – [2019-06-20 :16:53:07 +0800] [www.a.com/sid#7b0770][rid#9e8030/initial] (3) applying pattern ‘^/a\.html$’ to uri ‘/a.html’
localhost – – [2019-06-20 :16:53:07 +0800] [www.a.com/sid#7b0770][rid#9e8030/initial] (4) RewriteCond: input=’/a.html’ pattern=’!-s’ => matched
localhost – – [2019-06-20 :16:53:07 +0800] [www.a.com/sid#7b0770][rid#9e8030/initial] (2) rewrite ‘/a.html’ -> ‘/b.html’

然后测试第二种情况
日志如下:
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (2) init rewrite engine with requested uri /a.html
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (1) pass through /a.html
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (3) [perdir /home/web/ROOT/] strip per-dir prefix: /home/web/ROOT/a.html -> a.html
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (3) [perdir /home/web/ROOT/] applying pattern ‘.*’ to uri ‘a.html’
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (4) [perdir /home/web/ROOT/] RewriteCond: input=’/a.html’ pattern=’^/a.html$’ => matched
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (4) [perdir /home/web/ROOT/] RewriteCond: input=’/home/web/ROOT/a.html’ pattern=’!-s’ => not-matched
localhost – – [2019-06-20 :16:36:42 +0800] [www.a.com/sid#7b0688][rid#9e8030/initial] (1) [perdir /home/web/ROOT/] pass through /home/web/ROOT/a.html

观察两个日志文件
不同地方是:
1:在.htaccess里面判断的条件有前缀如:[perdir /home/web/ROOT/]
2: RewriteCond: input=’/home/web/ROOT/a.html’ pattern=’!-s’ => not-matched
input是个绝对路径
而在http.conf里面的是个相对路径
如: RewriteCond: input=’/a.html’ pattern=’!-s’ => matched

呵呵,好像有点眉目了。是不是在http.conf里面的是相对路径所以判断是否存在的时候都是匹配呢。
修改http.conf文件为:
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}   !-s
    RewriteRule ^/a\.html$  /b.html   [L]
及加上文档的根目录
测试成功。!!!!
日志如下:
localhost – – [2019-06-20 :16:53:39 +0800] [www.a.com/sid#7b0770][rid#9f8058/initial] (2) init rewrite engine with requested uri /a.html
localhost – – [2019-06-20 :16:53:39 +0800] [www.a.com/sid#7b0770][rid#9f8058/initial] (3) applying pattern ‘^/a\.html$’ to uri ‘/a.html’
localhost – – [2019-06-20 :16:53:39 +0800] [www.a.com/sid#7b0770][rid#9f8058/initial] (4) RewriteCond: input=’/home/web/ROOT/a.html’ pattern=’!-s’ => not-matched
localhost – – [2019-06-20 :16:53:39 +0800] [www.a.com/sid#7b0770][rid#9f8058/initial] (1) pass through /a.html

RewriteCond 的 input 内容为文件的绝对路径了。
呵呵。
看了在http.conf文件里面和在.htaccess文件里面使用
RewriteCond %{REQUEST_FILE} !-f
是有区别的。
在.htaccess文件里面不用加文档的根路径及%{DOCUMENT_ROOT}因为.htaccess文件时目录级别的。apache会自动加上路径
而在http.conf文件里面的 apache不会自动加上文档根路径。

发表评论

阿里云服务器双十一活动

阿里云优惠券怎么领既方便又实惠?(阿里云优惠券2021双十一特刊)

11月1日,2021年阿里云双十一上云狂欢节正式开启了,阿里云给新客户准备了全年最低特惠价格,云服务器低至0.4折起。阿里云服务器怎么买最便宜呢?下面阿里云北京授权分销商万维景盛为您介绍一下2021年阿里云双十一云计算产品最强省钱攻略,需要采购ECS云服务器、RDS云数据库、CDN网站加速、OSS对象存储、DDOS防护高防ip、SLB负载均衡等云计算产品的客户不要错过一年一次的好机会哦

阅读更多 »
dedecms织梦建站模板

DEDECMS织梦CMS建的网站要被起诉怎么办?脱坑迁移方法来了!

2021年9月26日,织梦开发商上海卓卓公司公告称,2021年10月26日起,织梦程序将开展大规模维权行动,开始收费,将对使用该网站的企业或个人没有购买授权的网站发起起诉行动。据了解,DEDECMS织梦程序的商业授权费用为5800元,织梦官方已经聘请了律师团队,采购了取证服务器,7*24小时不间断地全网抓取织梦站点,使用织梦程序的网站将被服务器拍照取证,用以起诉。

阅读更多 »
封面,企业邮箱

正规企业单位怎样选择高性价比企业邮箱?附阿里云企业邮箱优惠券

企业邮箱是以企业域名做后缀的邮箱,既体现公司品牌形象,又方便公司主管人员对员工信箱进行统一管理,还能使得公司商业信函来往获得更好更安全的管理,是现今互联网时代不可缺少的现代化通讯工具。正规企业、事业单位和机构组织,一般都要配备以自家域名为后缀的企业邮箱。企业邮箱产品林林总总,那么怎样才能选择性价比高的企业邮箱呢?阿里云企业邮箱分销商万维景盛市场部总监江先生介绍说,一般选择企业邮箱,需要考虑以下因素

阅读更多 »
正则表达式

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号?这个可以有!阿里云北京分销中心工程师这次给大家分享验证用户设置的密码强度的正则表达式。 验证用户设置的密码强度有哪些注意事项? 下面是几个不同密码复杂强度的实际案例, 让我们来看看怎么设置史上最复杂密码吧。

阅读更多 »
dedecms织梦建站模板

一读掌握dedecms织梦网站系统安装方法

一读掌握dedecms织梦网站系统安装方法,通过这一张图,让你完全掌握国内最受欢迎的网站管理系统DEDECMS的部署流程,从上传代码到运行程序、配置数据库、还原数据库、生成静态页,一应俱全,有了这张图解教程,安装织梦再也不求人了。发愁没有好的织梦模板?购买万维景盛安心主机,就送织梦精品模板,3000余套模板任选。

阅读更多 »
CSFR跨站请求攻击原理示意图

什么是CSFR跨站请求攻击及防御方法

CSRF即跨站请求攻击,是攻击者通过一些欺骗性的技术手段让用户的浏览器去访问一个自己以前登录过的站点并自动执行一些非授权的操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会认为这是真正的用户操作而去执行。

阅读更多 »