Apache/Nginx伪静态规则匹配http://出现的问题与解决

这个问题不知道有没有人遇到过,反正度娘和谷姐都没能帮到我!困扰了我挺长时间了,今天偶尔将代码放到Apache服务器下测试时,意外解决了!

问题是这样的,我搭建了一个网站icon图标抓取的API接口,正常情况下对象的传参是通过$_GET['url']获取的,因此常规获取图标的地址应该是:

http://domain.com/?url=zhangge.net

http://domain.com/?url=http://zhangge.net

为了开启浏览器缓存和后续的CDN缓存,我的设计思路如下:

①、在图标API网站目录下新建一个cache文件夹,以域名.ico的形式保存图标文件,比如zhangge.net.ico

②、当抓取某个网站的ico时,先通过Nginx或Apache判断是否存在缓存文件,如果存在就直接返回给浏览器,这样在没开启CDN的情况下,因为返回的是纯静态文件,浏览器将会自动缓存,也就是返回304状态,加载速度得到提升!

为了开启浏览器缓存,我将地址如下伪静态化:

http://domain.com/zhangge.net

http://domain.com/http://zhangge.net

这是之前写的Nginx下的伪静态规则:

当时发现不能生效!怎么都匹配不到http://,最后无奈只好用php重写参数中http://了!

今天,我将这个图标API搬家到了万网的免费主机上,是Apache环境,于是按照nginx的规则又写了一遍:

依然不行!奇了怪了,怎么就不能匹配http://呢?于是各种测试,比如将冒号和斜杠缓存url编码都不行!

其实在用nginx失败之后,我用php获取$_GET['url']发现得到的参数中的http://会是http:/,少一个斜杠!而且直接使用http://domain.com/?url=http://zhangge.net获取也是http:/zhangge.net,少一个斜杠!

今天鬼使神差的试了下伪静态中判断http:/,结果成功了!我擦原来要匹配http://,实际上是匹配http:/,少一个斜杠!真实匪夷所思,以前从来没遇到过!

所以上述2个伪静态规则应该如下编写:

A. Nginx伪静态:

 B. Apache伪静态:

文章写的很啰嗦,实际上关键性解释就是,在Nginx或Apache中要匹配请求url中的【http://】,应该是匹配【http:/】,也就是少写一个斜杠!大胆猜测匹配其他多个斜杠也应该是少一个斜杠。。。

好了,文章洋洋洒洒写了这么多,网站图标API也是成功搭建在万网免费虚拟主机上了。地址是http://seo.zgboke.com/geticon/ ,虽然是专门给中国博客联盟用的,但是如果你有图标调用需求,也可以在合理使用的前提下自由发挥。

另外,要查看是否实现浏览器缓存很简单,随便访问一个ico地址,比如:

http://seo.zgboke.com/geticon/zhangge.net

然后按下F12进入开发模式,定位到network(网络选项卡),多刷新一次就能看到304状态了:

Apache/Nginx伪静态规则匹配http://出现的问题与解决

304表示当前文件来自浏览器缓存,因为请求的文件和服务段的文件一致,不需要重复调取!

当然,本文写到的伪静态规则只是一部分,如果要实现CDN加速,那还得新增相应的规则,不过这都是后话了,等下次我在张戈博客分享这个网站图标抓取API源码的时候,会一并贴上,敬请期待!

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:8   其中:访客  6   博主  2

  1. 舍力博客 2 来自天朝的朋友 谷歌浏览器 Windows XP 广东省广州市 新一代数据中心

    撸过!

  2. 幻杀博客 5 来自天朝的朋友 火狐浏览器 Windows 10 山东省潍坊市 联通

    哈哈,我可以直接照搬 :evil:

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

      :cool: 搬吧~

      • 幻杀博客 5 来自天朝的朋友 火狐浏览器 Windows 10 山东省潍坊市 联通

        Apache文件不存在为什么返回的404?

      • 朱海涛 2 来自天朝的朋友 谷歌浏览器 Windows 7 陕西省西安市长安区 联通

        来支持下张戈

  3. 幻杀博客 5 来自天朝的朋友 火狐浏览器 Windows 10 山东省潍坊市 联通

    3Q,搞定

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

      厉害~

      • 幻杀博客 5 来自天朝的朋友 火狐浏览器 Windows 10 山东省潍坊市 联通

        你发给我的文件哈

加载中,请稍候...