BAE中实现WordPress固定链接及伪静态

蓝飞 蓝飞 | 时间:2012-11-19, Mon | 52,147 views
后台技术 

写在前面

有一好友在BAE上搭建了自己的WordPress博客,但由于BAE推出的时间较晚,不像SAE那样已经具备较为完善的应用仓库,对WordPress博客程序也没有官方的支持,而固定链接对于一个博客来说是比较重要的,伪静态有利于搜索引擎优化,而链接的格式若不尽早确定,日后再想改变将是一件非常麻烦的事情。

什么是BAE

百度应用引擎(Baidu App Engine,简称BAE)是基于百度基础架构推出的网络应用开发平台,基于BAE架构,使开发者不需要维护任何服务器,只需要简单的上传应用程序,就可以为用户提供服务。BAE有能力将原本单机的LAMP架构,变成分布式架构。

开发者可以基于BAE平台进行PHPJavaPython应用的开发、编译、发布、调试。同时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配置

从中也可以看出,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了的话,将会出现许多足以致命的错误。

如需转载请注明出处:蓝飞技术部落格

31 条评论 »

  1. 挺感兴趣的,不过连SAE还没用过,好像也得付费呀。

    1. BAE免费,只是现在需要邀请码。

  2. 找bae rewrite 找到这里来了。

  3. 嗯,解决问题的方法是多种多样的

  4. 我是一个新手,最近也在研究bae下伪静态的问题,能不能有个详细一点的东西,就是具体怎么操作。谢谢了、

    1. 具体的操作办法请看:http://t.cn/zWAl8dT

  5. 好!一会回去马上试试。就在为这问题困扰呢。

  6. 楼主,为什么我设置好固定链接之后,我的Ueditor插件出问题了呢,在编辑文章时插入图片却打开了网站首页.请楼主帮忙.我的app.conf代码如下
    handlers:
    - expire : .jpg modify 10 years
    - expire : .swf modify 10 years
    - expire : .png modify 10 years
    - expire : .gif modify 10 years
    - expire : .JPG modify 10 years
    - expire : .ico modify 10 years
    - url : (.*)\.css$
    script : $1.css
    - url : (.*)\.js$
    script : $1.js
    - url : (.*)\.jpg$
    script : $1.jpg
    - url : (.*)\.gif$
    script : $1.gif
    - url : (.*)\.png$
    script : $1.png
    - url : (.*)\.jpeg$
    script : $1.jpeg
    - url : (.*)\.php$
    script : $1.php
    - url : (.*)
    script : /index.php

    1. 应该是插入图片页面的链接恰好符合了你最后一个rewrite规则,所以跳转到了首页,你看看插入图片页面的地址,把这个地址从转发规则中排除就可以了。

      1. - url : (.*)
        script : /index.php
        应该就跟这段有关吧,而且我这么改还发现一个问题,就是我的后台地址也符合了转发规则,要在地址后打index.php才能打开后台.我想问你一下,就是我该怎么设置详细的规则,就是指定插件目录下不转发,后台目录下不转发.

        1. 对,所以这种方法很容易将不该转发的错误转发到了首页,我的建议是只转发需要转发的,就参考上面文章中的表格。

  7. 你好,很高兴能看到又一个技术型博客!

    之前因为百度BAE的伪静态问题,找到这里。虽然伪静态的问题解决了,但新的问题又开始困扰自己。不知道是主题是用了百度BAE禁用的函数,或是其它原因,目前在BAE下搭建的Wordpress根本没有上下页的显示,严重影响查看!不知道,博主有碰到这个问题吗?如果有的话,是怎么解决的呢?谢谢!

    BAE测试站:http://www.chaogen.asia/

    1. @genab
      我自己没用BAE搭建过WordPress哦,是同学在用(http://binary.duapp.com/),似乎他的也是没有上下页显示,应该是BAE的问题。

      1. 应该是BAE没开放某个函数吧!昨天,我发邮件向BAE询问此事,不知道他们是否能解决这个问题!

  8. 问一下,bae下面可以使用它的配置实现反向代理吗?

    1. @红色石头
      没试过哦= =。。

  9. 鸟

    菜鸟还是菜鸟,看了还是不会!

    1. 看来你已经搞定了,菜鸟轮到我了。

  10. 请问url规则在哪里填写。好像没在菜单里找到

    1. @damcy
      在应用管理里的云环境(BAE)-托管管理-版本管理-高级-配置

    2. ok。已搞定

  11. [...]http://www.clanfei.com/2012/11/1664.html】[...]

  12. 您好,文章归档的伪静态该怎么写啊?
    如:http://www.bluenoob.com/2010/12

  13. coffee coffee

    http://1.wikistandard.duapp.com/index.php/archives/123
    这样的固定链接怎么写规则呢?新手提问。

  14. [...]http://www.clanfei.com/2012/11/1664.html[...]

  15. [...]http://www.clanfei.com/2012/11/1664.html[...]

  16. [...]具体可以参考此文,http://www.clanfei.com/2012/11/1664.html我就不再介绍了。[...]

  17. [...]http://www.clanfei.com/2012/11/1664.html[...]