更改永久链接后,nginx日志中的Wordpress 404

时间:2017-05-03 11:26:13

标签: php wordpress nginx

所以我在 / usr / share / nginx / html 中设置了目标网页,并在 / usr / share / nginx / blog

中设置了博客

正如您在下面的配置中所看到的,博客被配置为别名。每当有人试图访问博客时,例如: you.com/blog ,就会将他们带到 you.com/blog / 。仍然没有什么大不了的担心。所以在wordpress中,网址设置为简单。一切都有效,直到这一点没有任何问题。现在,由于美观,网址需要看起来更好,即:名字后。例如: you.com/blog/name-of-my-post 。如果配置在wordpress中从plain更改为post-name,则nginx会给出带有以下消息的404

2017/05/03 09:28:00 [error] 2869#0: *1492652 "/usr/share/nginx/blog/my-post/index.html" is not found (2: No such file or directory), client: 73.1.2.24, server: you.com, request: "GET /blog/my-post/ HTTP/1.1", host: "you.com", referrer: "https://you.com/blog/"

我注意到index.html最终会被附加。在php / blog块中尝试了不同的更改之后,我仍然坚持使用404.这是我们正在运行的配置。

server {
    root /usr/share/nginx/html;
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2 ;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_certificate /var/keys/api_ssl.crt;
    ssl_certificate_key /var/keys/api_priv.key;
    server_name you.com;

    index index.html index.php index.htm;

    location / {
    try_files $uri $uri.html $uri/ uri.html = 404;
        }   

    location /blog {
        alias /usr/share/nginx/blog;
        if (!-e $request_filename) {
           rewrite /blog/wp-admin$ $scheme://$host$uri/ permanent;
           rewrite ^(/[^/]+)?(/wp-.*) $2 last;
           rewrite ^(/[^/]+)?(/.*\.php) $2 last;
        }   
        try_files $uri $uri/ /index.php?$args;
        location ~ \.php {
            fastcgi_pass 127.0.0.1:9000;
            include fastcgi_params;
            fastcgi_index index.php;
            $document_root/$fastcgi_script_name;
        }
    }
}

如何获取 / blog / my-post-here 而不是简单类型 you.com/blog/?p=10

备注:博客( / usr / share / nginx / blog )&网站( / usr / share / nginx / html 纯HTML)位于2个单独的文件夹中。你不应该在 / blog 块之外做任何php。

编辑2017年5月 - 4月

修改后的nginx.config成功重定向到博客/后名

server {
    root /usr/share/nginx/html;
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2 ;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_certificate /var/keys/api_ssl.crt;
    ssl_certificate_key /var/keys/api_priv.key;
    server_name xyz.com;

    index index.html index.php index.htm;

    location / {
    try_files $uri $uri.html $uri/ uri.html = 404;
    }   


    location /blog {
    alias /usr/share/nginx/blog;
    index index.html index.php;
    try_files $uri $uri/ @blog;
    expires 30d;
    if ($uri ~ "^/index.php") {
        rewrite /  redirect;
    }

    location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_index index.php;
    }
}

location @blog {
    rewrite ^/blog/(.*) /blog/index.php?$args;
}

3 个答案:

答案 0 :(得分:1)

您的nginx配置似乎有误。 1)从博客中取出你的块 location ~ \.php {fastcgi_pass 127.0.0.1:9000;include fastcgi_params;fastcgi_index index.php;$document_root/$fastcgi_script_name; } 并使用以下代码替换您的块。 location /blog {index index.html index.php;try_files $uri $uri/ @blog;expires 30d;if ($uri ~ "^/index.php"){rewrite / redirect;}}location @blog {rewrite ^/blog/(.*) /blog/index.php?$args; } 它会有所帮助

答案 1 :(得分:0)

如果您保存了永久链接,那么它会在网址中显示帖子标题,应该是以下代码:

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

看起来不像这样:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<Name>Test</Name>
</root>

您不需要手动设置/ blog,如果您在nginx配置中具有上述内容,wordpress将为您执行此操作。如果你愿意,我可以上传我的整个配置。

答案 2 :(得分:-1)

似乎您的网站有明确的权限重写模块问题,因此无法重写。 htaccess 文件。请咨询您的托管服务提供商,并要求重新启用 Apache 或他们正在使用的服务器的模块。并且还要求对root文件夹授予写入权限,以便wordpress可以在您更改永久链接时创建。 htaccess 文件。

希望它有所帮助。