找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 728|回复: 140

Wordpress固定链接404错误问题.nginx系统.

[复制链接]

5

主题

118

回帖

255

积分

中级会员

积分
255
发表于 2009-8-26 17:26:39 | 显示全部楼层 |阅读模式
如题,Nginx+MySQL+PHP+Memcache+Vsftpd一键安装后,
WP里的在固定连接中设置成/%postname%或者/其他的都会出现如上面所示错误提示,而,如果改成/index.php/%postname%或/?p=123之类的就变的正常了.
在网上搜了下,有apache2有没有开启mod_rewrite的解决,还有Linux主机的lighttpd服务的解决办法.可是nginx怎么解决这个问题啊?
回复

使用道具 举报

108

主题

4571

回帖

9502

积分

论坛元老

积分
9502
发表于 2009-8-26 17:32:51 | 显示全部楼层
你的 rewrite 规则怎么写的啊
回复

使用道具 举报

5

主题

118

回帖

255

积分

中级会员

积分
255
 楼主| 发表于 2009-8-26 17:43:41 | 显示全部楼层
找到了解决方法.可是我不懂怎么新建文件,怎么在nginx配置文件中include这个文件,重新load配置?请高手指点.

我用wordpress super cache和nginx来加速wp博客网页,由于需要使用wordpress permalink,需要为wordpress建立一个nginx的rewrite规则, 参照了wordpress super cache作者博客中的一篇评论,具体操作方法如下,首先新建一个文件your_nginx_path/conf/wp_rewrite.conf, 建立如下:

if (-f $request_filename) {
expires 7d;
break;
}

set $supercache_file ”;
set $supercache_uri $request_uri;

if ($request_method = POST) {
set $supercache_uri ”;
}

# Using pretty permalinks, so bypass the cache for any query string
if ($query_string) {
set $supercache_uri ”;
}

if ($http_cookie ~* “comment_author_|wordpress|wp-postpass_” ) {
set $supercache_uri ”;
}

# if we haven’t bypassed the cache, specify our supercache file
if ($supercache_uri ~ ^(.+)$) {
set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
}

# only rewrite to the supercache file if it actually exists
if (-f $document_root$supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}

# all other requests go to Wordpress
if (!-e $request_filename) {
rewrite . /index.php last;
}
然后在你的nginx配置文件中include这个文件,重新load配置即可。
回复

使用道具 举报

1522

主题

3万

回帖

8万

积分

管理员

积分
81532
发表于 2009-8-26 17:50:23 | 显示全部楼层
在nginx.conf里面

给你举个例子

server {
        listen   80;
        server_name  www.hostloc.com;
        root /var/www/daigou;
        include your_nginx_path/conf/wp_rewrite.conf;
}
回复

使用道具 举报

5

主题

118

回帖

255

积分

中级会员

积分
255
 楼主| 发表于 2009-8-26 18:30:24 | 显示全部楼层
刚才试了,这个不行.我的操作应该没问题.
又找了一个,是这么说的.大大帮我看看怎么做吧.
Nginx
在上次《Nginx的Rewrite配置》中有个朋友问WordPress如何配置Rewrite,当时也没给个完整正确的答案,最近自己需要Nginx下配置,不得不去解决这个问题。

其实在Nginx下配置WordPress的Rewrite还是比较简单的,在location /{………………}里面加入
if (!-f $request_filename){
rewrite (.*) /index.php;
}
即可实现。

下面是一个完整的vhost的配置文件[ol]
  • server {
  • listen 80;
  • server_name ccvita.com www.ccvita.com;
  • location / {
  •         index index.html index.htm index.php;
  •         root /www/wwwroot/ccvita.com;
  •         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;
  •         }
  • }
  • location ~ \.php$ {
  •         include fastcgi_params;
  •         fastcgi_index index.php;
  •         fastcgi_pass 127.0.0.1:8787;
  •         fastcgi_param SCRIPT_FILENAME /www/wwwroot/ccvita.com$fastcgi_script_name;
  •         }
  • location /ccvita-status {
  •         stub_status on;
  •         access_log off;
  •         }
  • }[/ol]复制代码
    [ 本帖最后由 vip 于 2009-8-26 18:31 编辑 ]
  • 回复

    使用道具 举报

    1522

    主题

    3万

    回帖

    8万

    积分

    管理员

    积分
    81532
    发表于 2009-8-26 18:37:45 | 显示全部楼层
    看起来加的就是这么段了

    location / {
            index index.html index.htm index.php;
            root /www/wwwroot/ccvita.com;
            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;
            }

    }

    规则对不对我也不知道呢。
    回复

    使用道具 举报

    108

    主题

    4571

    回帖

    9502

    积分

    论坛元老

    积分
    9502
    发表于 2009-8-26 18:48:56 | 显示全部楼层
    我以前 测试的 是这样的 在我这里 使用 一切正常

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

    使用道具 举报

    5

    主题

    118

    回帖

    255

    积分

    中级会员

    积分
    255
     楼主| 发表于 2009-8-26 18:51:57 | 显示全部楼层
    晕,刚查了下,那是Ubuntu里Vhost的配置文件,我是centos.
    头大了,怎么弄.
    回复

    使用道具 举报

    5

    主题

    118

    回帖

    255

    积分

    中级会员

    积分
    255
     楼主| 发表于 2009-8-26 18:53:02 | 显示全部楼层
    原帖由 zyypp 于 2009-8-26 18:48 发表


    我以前 测试的 是这样的 在我这里 使用 一切正常

        if (-f $request_filename/index.html){
                    rewrite (.*) $1/index.html break;
            }
            if (-f $request_filename/index.php){
           ...

    这段代码放在哪里呢?我的路径是/usr/local/nginx/conf/nginx.conf
    修改nginx.conf,加上这段代码就可以了吗?
    回复

    使用道具 举报

    0

    主题

    9

    回帖

    24

    积分

    新手上路

    积分
    24
    发表于 2009-8-26 18:57:57 | 显示全部楼层
    ................用这段 替换上面的 IF 开始的那段我是用置顶帖那个lnmp安装包,我也是用wordpress,下面是我的配置[ol]
  • server
  •         {
  •                 listen       80;
  •                 server_name www.aaa.cn aaa.cn;
  •                 index index.html index.htm index.php;
  •                 root  /home/www/aaa.cn;
  •                                 if (!-e $request_filename) {
  •                                                 rewrite ^(.*)$ /index.php?q=$1 last;
  •                                 }
  •                 location ~ .*\.(php|php5)?$
  •                         {
  •                                 fastcgi_pass  unix:/tmp/php-cgi.sock;
  •                                 #fastcgi_pass  127.0.0.1:9000;
  •                                 fastcgi_index index.php;
  •                                 include fcgi.conf;
  •                         }
  •                 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  •                         {
  •                                 expires      30d;
  •                         }
  •                 location ~ .*\.(js|css)?$
  •                         {
  •                                 expires      12h;
  •                         }
  •                 log_format  access2  '$remote_addr - $remote_user [$time_local] "$request" '
  •              '$status $body_bytes_sent "$http_referer" '
  •              '"$http_user_agent" $http_x_forwarded_for';
  •                 access_log  /home/logs/web_mysite.log  access2;
  •         }[/ol]复制代码
    [ 本帖最后由 gdtv 于 2009-8-26 19:00 编辑 ]
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-1-11 17:41 , Processed in 0.026127 second(s), 5 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表