BAE中实现WordPress固定链接及伪静态
杰拉斯 | 时间:2012-11-19, Mon | 65,271 views后台技术
写在前面
有一好友在BAE上搭建了自己的WordPress博客,但由于BAE推出的时间较晚,不像SAE那样已经具备较为完善的应用仓库,对WordPress博客程序也没有官方的支持,而固定链接对于一个博客来说是比较重要的,伪静态有利于搜索引擎优化,而链接的格式若不尽早确定,日后再想改变将是一件非常麻烦的事情。
什么是BAE
百度应用引擎(Baidu App Engine,简称BAE)是基于百度基础架构推出的网络应用开发平台,基于BAE架构,使开发者不需要维护任何服务器,只需要简单的上传应用程序,就可以为用户提供服务。BAE有能力将原本单机的LAMP架构,变成分布式架构。
开发者可以基于BAE平台进行PHP、Java、Python应用的开发、编译、发布、调试。同时BAE平台也提供了大量的云服务给开发者,包括fetch URL、task queue、SQL、memcache,后续会提供更多服务。在性能方面,如果开发者希望增加服务能力,可以通过申请更多执行单元的方式进行灵活的调整。
BAE服务可以让开发者在开发网络应用程序的过程中摆脱繁琐的环境、服务问题,把精力专注于业务逻辑。
简单的上传应用程序,就可以为用户提供服务。BAE有能力将原本单机的LAMP架构,变成分布式架构。
开发者可以基于BAE平台进行PHP、Java、Pyt应用的开发、编译、发布、调试。同时BAE平台也提供了大量的云服务给开发者,包括fetch URL、task queue、SQL、memcache,后续会提供更多服务。在性能方面,如果开发者希望增加服务能力,可以通过申请更多执行单元的方式进行灵活的调整。
BAE中的rewrite
Rewrite是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术。ewrite主要的功能就是实现URL的重写,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。
在BAE中,rewrite是使用应用配置中的url配置来实现的,文档(详见BAE应用配置教程)中说明,url配置的功能类似url rewrite功能。将符合匹配规则的url重写到指定的脚本处理。Rewrite规则可以配置多条。顺序是从上往下依次匹配,遇到第一个匹配成功的即结束配置过程。另外, 并不需要请求的uri完全匹配指定的正则,只要其中有部分内容匹配即可。
从中也可以看出,BAE对url配置的文档并不详尽,对于许多人来说,实在是一个不小的难题。
如何实现伪静态
在SAE中,WordPress伪静态的实现方式是在配置文件中添加如下rewrite规则:
- rewrite:if (!is_file() && !is_dir() && path ~ "^/(.*)") goto "index.php/$1"
可以看出原理为:将既不是文件,也不是文件夹的地址转发至index.php/之后,既是将伪静态路径作为参数使用pathinfo的形式传至index.php,由单一入口文件index.php统一处理,解析并显示出所对应的内容。
同样的方式在BAE却彻底地失败了,首先,我并不知道BAE中如何判断一个路径是否文件或文件夹,其次直接将某个地址rewrite到index.php/之后,却出现了404错误页面,这说明了一个问题:BAE不支持pathinfo!
后来,我直接将所有特定格式的路径(文章、搜索、归档、标签、类别、独立页面)rewrite到相对应的原本地址上:
比如:
http://binary.duapp.com/2012/11/629.html
rewrite到:
http://binary.duapp.com/index.php?p=629
进而发现,其实只要将所有需要设置固定链接的路径重写至index.php即可,WordPress会根据当前路径自动判断并显示出当前内容。
好了,说了这么多,也该上最重要的部分了,以下面的固定链接格式为例:
/%year%/%monthnum%/%post_id%.html
所需的配置信息如下:
规则类型 | 规则 | 执行 |
---|---|---|
url | /.*/.*/.*.html | /index.php |
url | /rss.xml | /index.php |
url | /feed | /index.php |
url | /comments/feed | /index.php |
url | /feed/.* | /index.php |
url | /author/.* | /index.php |
url | /search/.* | /index.php |
url | /tag/.* | /index.php |
url | /category/.* | /index.php |
url | /date/.* | /index.php |
url | /page/.* | /index.php |
这样便搞定了,当然,如果你有独立页面,那么需要再为每一个独立页面多添加一条规则,以(http://www.clanfei.com/about/)为例:
规则类型 | 规则 | 执行 |
---|---|---|
url | /about | /index.php |
或许有人会问,既然全部都是重写至index.php,何不直接把/.*重写至/index.php呢?答案其实很简单,因为除了上述的一些固定链接之外,还有许多路径是不需要重写的,比如wp-content目录,wp-admin目录,如果把这些地址也rewrite了的话,将会出现许多足以致命的错误。
如需转载请注明出处:杰拉斯的博客
挺感兴趣的,不过连SAE还没用过,好像也得付费呀。
BAE免费,只是现在需要邀请码。
找bae rewrite 找到这里来了。
欢迎光临^_^
嗯,解决问题的方法是多种多样的
我是一个新手,最近也在研究bae下伪静态的问题,能不能有个详细一点的东西,就是具体怎么操作。谢谢了、
具体的操作办法请看:http://t.cn/zWAl8dT
好!一会回去马上试试。就在为这问题困扰呢。
楼主,为什么我设置好固定链接之后,我的Ueditor插件出问题了呢,在编辑文章时插入图片却打开了网站首页.请楼主帮忙.我的app.conf代码如下
expire : .jpg modify 10 yearsexpire : .swf modify 10 yearsexpire : .png modify 10 yearsexpire : .gif modify 10 yearsexpire : .JPG modify 10 yearsexpire : .ico modify 10 yearsurl : (.*).css$handlers:
script : $1.cssurl : (.*).js$
script : $1.jsurl : (.*).jpg$
script : $1.jpgurl : (.*).gif$
script : $1.gifurl : (.*).png$
script : $1.pngurl : (.*).jpeg$
script : $1.jpegurl : (.*).php$
script : $1.phpurl : (.*)
script : /index.php
应该是插入图片页面的链接恰好符合了你最后一个rewrite规则,所以跳转到了首页,你看看插入图片页面的地址,把这个地址从转发规则中排除就可以了。
script : /index.php
应该就跟这段有关吧,而且我这么改还发现一个问题,就是我的后台地址也符合了转发规则,要在地址后打index.php才能打开后台.我想问你一下,就是我该怎么设置详细的规则,就是指定插件目录下不转发,后台目录下不转发.
对,所以这种方法很容易将不该转发的错误转发到了首页,我的建议是只转发需要转发的,就参考上面文章中的表格。
你好,很高兴能看到又一个技术型博客!
之前因为百度BAE的伪静态问题,找到这里。虽然伪静态的问题解决了,但新的问题又开始困扰自己。不知道是主题是用了百度BAE禁用的函数,或是其它原因,目前在BAE下搭建的Wordpress根本没有上下页的显示,严重影响查看!不知道,博主有碰到这个问题吗?如果有的话,是怎么解决的呢?谢谢!
BAE测试站:http://www.chaogen.asia/
@genab
我自己没用BAE搭建过WordPress哦,是同学在用(http://binary.duapp.com/),似乎他的也是没有上下页显示,应该是BAE的问题。
应该是BAE没开放某个函数吧!昨天,我发邮件向BAE询问此事,不知道他们是否能解决这个问题!
@genab
嗯~
问一下,bae下面可以使用它的配置实现反向代理吗?
@红色石头
没试过哦= =。。
菜鸟还是菜鸟,看了还是不会!
看来你已经搞定了,菜鸟轮到我了。
请问url规则在哪里填写。好像没在菜单里找到
@damcy
在应用管理里的云环境(BAE)-托管管理-版本管理-高级-配置
ok。已搞定
[...]http://www.clanfei.com/2012/11/1664.html】[...]
您好,文章归档的伪静态该怎么写啊?
如:http://www.bluenoob.com/2010/12
/\d/\d/?
试试?
http://1.wikistandard.duapp.com/index.php/archives/123
这样的固定链接怎么写规则呢?新手提问。
[...]http://www.clanfei.com/2012/11/1664.html[...]
[...]http://www.clanfei.com/2012/11/1664.html[...]
[...]具体可以参考此文,http://www.clanfei.com/2012/11/1664.html我就不再介绍了。[...]
[...]http://www.clanfei.com/2012/11/1664.html[...]