WordPress 3.0 & nginx - permalink, 404 problem

2019-03-19 11:13发布

I've installed nginx, FastCGI and PHP on my server. WordPress 3.0 installed after a bit of a monster battle, but it's installed and working well.

However, when I change the permalink settings to anything other than default, I get 404 errors on every post, article and page.

I understand that this is something to do with nginx not supporting .htaccess and WordPress getting confused with where to go when a page is requsted.

I've tried a few rewrites in the nginx conf files and even the nginx compatibility plugin; neither have worked. With one rewrite I managed to stop the 404 errors, but instead of WordPress finding the post I was after I merely got my PHP confirmation page. Bah.

Forums are littered with people with similar issues. Does anyone have a solution?

8条回答
唯我独甜
2楼-- · 2019-03-19 11:41

I did the following..

in the folder /home/userrunningnginx/nginx/domain.com

I have:

default.conf (file)

include /home/neukbaarofnietps/nginx/neukbaarofniet.com/drop;

drop (file)

# Rather than just denying .ht* in the config, why not deny
# access to all .invisible files
location ~ /\. { deny  all; access_log off; log_not_found off; }

nginx.conf (file)

location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;

}

WORDPRESS-NGINX.CONF (file)

 #######################
# WP Super Cache

# if the requested file exists, return it immediately
if (-f $request_filename) {
  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$1/index.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;
}
查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-03-19 11:47

this does not work if you are using location other than / like:

~ .php$, what i meant to say that pretty link will work but your graphics will be all over the place. so what you need is exactly stated below.

http://www.pearlin.info

  location ~ \.php$



   {
        try_files $uri $uri/ /index.php?$uri&$args;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php?url=$1 break;
  }
查看更多
登录 后发表回答