最新消息:为了本站的未来,希望大家能广为分享,另期待您投稿外贸人建站QQ交流群:201706683,验证请输入:卡拉科技

Nginx下完美解决WordPress的伪静态

外贸&其它 Tony 4440浏览 0评论

最近刚刚换了阿里云的VPS,使用的是admin5提供的主机宝镜像(这个如果是购买阿里云ECS服务器的话是免费的,否则需要另外购买,像我一样使用阿里云ECS的初学者比较适合,面板很小白很简单),由于使用的是Nginx服务器而不是Apache,传统的Apache伪静态规则不使用,主机宝后台有自带的专门用于Nginx的伪静态规则,添加好了。

Nginx

安装wordpress,使用固定链接,一切正常!然后安装No Category Base(便于搜索引擎收录嘛),出问题了!前台category是去掉了,但是后台的任何功能都无法访问了,直接显示 404 Not Found nginx页面,仔细看一下地址栏的路径,全是类似”http://shuibengzhijia.com/edit.php”这样的,关键就在于他们都少了”/wp-admin/”这条路径,路径都不对了,肯定404!

百度了半天,查到了一些解决方法,但是由于我不懂代码,而且主机宝的系统貌似保护起来了,用putty访问不到需要修改的文件,没有办法尝试一一尝试那些方法的正确与否。放弃了..最后百度到了另外一个简单有效的办法,直接修改伪静态规则,测试了一下,成功了,原来的伪静态规则一大推,修改之后非常简洁: “try_files $uri $uri/ /index.php;”

由于我不懂代码,将来会不会出其他的问题还不知道,目前前台后台一切正常,希望朋友们多多交流指导:)

办法来源于百度经验,我这里摘抄过来,有兴趣的朋友也可以去看原文链接:http://jingyan.baidu.com/article/fa4125acae758928ac7092cd.html

在Nginx下,设置Wordpress伪静态的教程,网上一大堆,且相似度极高,大家也都知道差不多都是copy过来的。不是说它们不能解决问题,但是,没有弄明白为什么,而纯粹的copy,除了给庞大的网络信息里增加一些垃圾,对任何人都没有帮助。

我们先分析一下Wordpress在apache下的伪静态规则:

<IfModule mod_rewrite.c>

RewriteEngine On RewriteBase /

RewriteRule ^index.php$ -[L]

RewriteCond %{REQUEST_FILENAME}!-f

RewriteCond %{REQUEST_FILENAME}!-d

RewriteRule . /index.php[L]

</IfModule>

这里意思其实很简单,把对所有访问index.php的文件重定向到当前根,当访问其它文件或者目录时,如果都不存在,所有请求都重定向到index.php,这样一来,我们可以访问网站上的已经存在的文件或目录,对于实际不存在的文件则交给index.php来处理。当请求交到index.php时,如果请求的是文档的固定链接,则可以查询数据库,返回文章,如果不是,则可以用index.php来生成更加友好的404页面,而不是服务器自带的404页面。那么在nginx下怎么去设置wordpressd的伪静态呢?其实在这之前,网上也能够查到很多答案,大致都是一样的结果,我摘录一下:

location / {

if(-f $request_filename/index.html){

rewrite(.*)$1/index.html break;

}

if(-f $request_filename/index.php){

rewrite(.*)$1/index.php;

}if(!-f $request_filename){

rewrite(.*)/index.php;}

}

可以看到,这样设置起来实际上是非常麻烦的,特别是当在一个站点下有多个wordpress目录时,需要对每个目录都单独设置,特别容易出错。如果对Nginx真的非常熟悉,就知道它有一个“try_files”指令,用来判断资源是否存在,用法如下:

1, try_files uri1 uri1 … urin

这里是逐个判断资源是否存在,有则返回,没有则继续找下一个资源

2,try_files uri1 uri2 … =404

这里是逐个判断资源是否存在,有则返回,没有则继续找下一个资源,如果都没有,则返回404

那么,实际上这个指令正好满足wordpress伪静态的需求:当访问一个资源时,首先查看它是否在服务器上存在,如果不存在,则查看相同名称的文件夹是否存在,如果都不存在,则交给wordpress的index.php处理。所以,最终我们只需要一句代码就可以实现wordpress的伪静态:

try_files $uri $uri/ /index.php;

文章到最后,说一句,多尝试学习才是学习之道,要警惕网络上的很多答案,因为很多人懂得很少,却说的很多。

编者按:感谢“一米阳光”的投稿;来源(http://www.shuibengzhijia.com

转载请注明:卡拉科技 » Nginx下完美解决WordPress的伪静态

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 试了八万个,折腾了好长时间也不摸门,跨系统就要命,啥也不懂……
    sdsdds2年前 (2015-05-09)回复
  2. try_files $uri $uri/ /index.php;用了这个也不起作用嘛,设定固定链接之后还是404
    street2年前 (2015-06-02)回复