最新消息:

Nginx下修改wordpress固定链接后导致访问文章404

Nginx 大步 13035浏览 0评论

今天下午没事,像以往一样开始做seo的优化,当然牵扯到永久链接,wordpress提供多种类型的链接形式

1/%year%/%monthnum%/%day%/%postname%/

2/%year%/%monthnum%/%postname%/

3/%year%/%monthnum%/%day%/%postname%.html

4/%year%/%monthnum%/%postname%.html

5/%category%/%postname%.html

6/%post_id%.html

7/%postname%/

我选择了/%postname%.html,伪静态,虽然现在貌似没什么差别了,但还是该下吧。下面就出现了修改固定链接后,访问文章会出现404错误,以前我都是apache做web服务器,所以只要apache下就三个个关键,即

  1. wordpress对目录下的.htaccess拥有读写权限
  2. 固定链接的目录结构需要 Apache服务器的mod_rewrite模块支持,所以在Apache配置文件httpd.conf中将 LoadModule rewrite_module modules/mod_rewrite.so设置为启用。
  3. 同样是Apache配置文件,其中对于站点目录下的AllowOverride None的参数设置为All。当然修改完配置后,一定要重启Apache服务。
  4. 由于是新配置的本地测试环境,2、3两项问题同时出现,逐项更正设置后,固定链接的工作正常。

现在我用的nginix,所以也要修改nginix的ngnix.conf配置文件,让其支持重定向

假设我的wordpress博客是的 server{}段是直接放到放到了nginx.conf  (有的人为了方便管理,都习惯在单独写个vhost/目录来存放每个网站的配置文件,这就要根据你自己的设置来添加了)

vi /your_nginx_path/conf/nginx.conf

按照nginix的正则表达式的规则,可参考:Nginx 的中文维基

  • ^:匹配输入字符的开始位置
  • $:匹配数日字符串的结束位置
  • +:匹配前面的子表达式一次或者多次
  • [0-9]:数字字符范围
  • $1:调用变量

在server{}  字段   中的  “root /websit/wwwroot/;”(这行就是指定网站所在目录的)  这一行的下面 ,添加下面的内容:

         

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;
}

rewrite /wp-admin$ $scheme://$host$uri/ permanent;//这行是为了防止打开后台、插件页等打不开的。

保存后,输入    /etc/init.d/nginx restart , 重启nginix。就ok了!

相当于告诉nginix访问这些后按照正则表达式转到其唯一正确的地址,以此打开文章。

貌似/%postname%/会以中文为链接,为了seo,可以考虑一个插件 WP Slug Translate,它会自动换中文标题为英文,不能联网就改为拼音。

上面的方法对于我博客的wordpress固定链接不是都有效,所以,我自己 根据自己的情况又加了一条,见我另外一篇文章nginx下由/%postname%/rewrite到/%postname%.html写法

 

#####################################################33

2015年1月30号更新

貌似官方给出了新的开启wordpress固定链接的方法,也简单的多。这里假设,我在nginx的conf文件夹下创建个wordpress.conf ,将下面的代码粘贴进去:

location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

 

我的博客nginx虚拟机配置文件在  conf/vhost/www.dabu.info.conf  。同样,在root 那行下面,添加一行:

include wordpress.conf;

接着重启nginx就可以正常访问了

 

大家可以参考以下文章,好弄个明白:

 

 

转载请注明:大步's Blog » Nginx下修改wordpress固定链接后导致访问文章404

发表我的评论
取消评论

表情

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

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

网友最新评论 (10)

  1. 不错,谢谢。
    星云☁2年前 (2015-01-02)Reply
  2. 楼主,你的这种写法可以实现,但是后台不能访问了,像插件,主题都打不开了,求解决方案
    舞影凌风2年前 (2015-01-30)Reply
    • 文章已经更新,你可以去看下,用最新的方法吧
      大步2年前 (2015-01-30)Reply
  3. 路过,谢谢楼主
    奇趣视频2年前 (2015-03-06)Reply
  4. 666666
    HowieChih2年前 (2015-07-10)Reply
  5. 很详细,在测试环境折腾半天终于可以了。
    技术杂谈1年前 (2016-03-15)Reply
  6. 楼主,在我的配置文件中没有找到server{}段 是怎么回事呢?请教,谢谢!
    jason1年前 (2016-05-30)Reply
    • 不清楚你的配置,无法回答
      大步12个月前 (06-04)Reply
  7. 简单的方式:try_files $uri $uri/ /index.php?$args; 参考:http://nginxlibrary.com/wordpress-permalinks/
    贵い在坚持3个月前 (02-21)Reply
  8. 用了官方给出的方法,解决了。谢谢!
    Ivan3个月前 (03-04)Reply
SiteMap