最近刚刚换了阿里云的VPS,使用的是admin5提供的主机宝镜像(这个如果是购买阿里云ECS服务器的话是免费的,否则需要另外购买,像我一样使用阿里云ECS的初学者比较适合,面板很小白很简单),由于使用的是Nginx服务器而不是Apache,传统的Apache伪静态规则不使用,主机宝后台有自带的专门用于Nginx的伪静态规则,添加好了。
Nginx
安装wordpress,使用固定链接,一切正常!然后安装No Category Base(便于搜索引擎收录嘛),出问题了!前台category是去掉了,但是后台的任何功能都无法访问了,直接显示 404 Not Found nginx页面,仔细看一下地址栏的路径,全是类似””这样的,关键就在于他们都少了”/wp-admin/”这条路径,路径都不对了,肯定404!
百度了半天,查到了一些解决方法,但是由于我不懂代码,而且主机宝的系统貌似保护起来了,用putty访问不到需要修改的文件,没有办法尝试一一尝试那些方法的正确与否。放弃了..最后百度到了另外一个简单有效的办法,直接修改伪静态规则,测试了一下,成功了,原来的伪静态规则一大推,修改之后非常简洁: “try_files $uri $uri/ /index.php;”
由于我不懂代码,将来会不会出其他的问题还不知道,目前前台后台一切正常,希望朋友们多多交流指导:)
在Nginx下,设置Wordpress伪静态的教程,网上一大堆,且相似度极高,大家也都知道差不多都是copy过来的。不是说它们不能解决问题,但是,没有弄明白为什么,而纯粹的copy,除了给庞大的网络信息里增加一些垃圾,对任何人都没有帮助。
我们先分析一下Wordpress在apache下的伪静态规则:
RewriteEngine On RewriteBase /
RewriteRule ^index.php$ -[L]
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule . /index.php[L]
这里意思其实很简单,把对所有访问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;
文章到最后,说一句,多尝试学习才是学习之道,要警惕网络上的很多答案,因为很多人懂得很少,却说的很多。
因为与apache规则有一些不一样,所以我们不能直接使用apache的wordpress规则了。
费话不说多直接上代码
代码如下 复制代码
[root@localhost ~]# cat /etc/nginx/wprw.conf
rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /index.php last;
}
后面网上找到一段这样写法
nginx下wordpress 伪静态规则:
代码如下 复制代码
location / {
index index.html index.php;
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;
}
}
将上述代码插入 /usr/local/nginx/conf/nginx.conf 的 server {…} 中,重启 nginx(/etc/init.d/nginx restart) 即可生效。
保存,重启 Nginx 即可。
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nginx , 代码 , 配置 伪静态 wordpress伪静态nginx、wordpress伪静态规则、nginx伪静态规则、nginx伪静态规则写法、nginx php伪静态规则,以便于您获取更多的相关知识。