首先默认想仔细看本文的童鞋都是wordpress的初中级玩家、对php和服务器等也有一定的知识。 无论你通过哪种方式安装sae版的wordpress(代码仓库在线安装/下载wordpress改装版SVN提交),你如果碰到在设定wordpress固定链接时所有页面都出现404错误时,请看下文。
解决方案:URL重写(rewrite),也即自定义config.yaml。
一般情况:wordpress安装在根目录,这种问题的解决方案网上比较多,本质上都如下:
1. 修改根目录下的config.yaml文件(建议使用在线代码编辑方式,省去SVN不断提交的麻烦)。修改如下: handle: - rewrite: if (!is_file() && !is_dir() && path ~ "^/(.*)") goto "index.php/$1"
2. 点击保存,此时固定链接即可正常访问。
3. 简单解释下原理:is_file() 和 is_dir()判断当前URL是否是本地文件或者本地路径的名字,比如“www.louqibin.me/home.png” ,这个URL是我本地一张图片的路径,此时判断条件不成立,URL不重写,直接访问。但是比如“http://www.louqibin.me/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/ ”,这个URL既不是一个文件路径也不是一个目录路径,同时path="/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/ ”,这个path满足正则表达式“^/(.*)"”,该表达式要求判断path是否是以“/"开头之后跟任何字符,显然例子中的path满足,rewrite被激活,goto即为路径跳转,"index.php/$1"的意思是重定向到:
www.louqibin.me/index.php/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/
即在原来URL中间插入/index.php/即可解决问题!
如果到这里你的问题还没有解决,正如我碰到的那样,我的情况是:我在一台sae服务器上装了多个wordpress,即在子目录下安装了wordpress。比如我在子目录blog和子目录dev下分别安装了两个博客。此时需要稍微改动下正则表达式如下: handle: - rewrite: if (!is_file() && !is_dir() && path ~ "^/(blog|dev)/(.*)") goto "$1/index.php/$2"
注意你应该根据你的情况修改正则表达式中的目录名字!
$1代表的是blog或者dev中任意一个字符串
$2代表的是(.*)中的所有字符。
原理都是一样的,在中间插入/index.php/。
刷新页面,怎么样,固定链接是不是生效了?恭喜!
除非注明,Leo’s Dev Blog文章均为原创,转载请以链接形式标明本文地址
本文地址:http://www.louqibin.me/dev/index.php/2013/08/08/为什么邮件地址中用等符号来代替.html