Nginx + Wordpress Multisite 3.4.2 + 子目录 + 静态页面和永久链接

Nginx + Wordpress Multisite 3.4.2 + 子目录 + 静态页面和永久链接

我正在尝试使用子目录、Nginx、php5-fpm、APC 和 Batcache 设置 Wordpress Multisite。和许多其他人一样,我也陷入了永久链接重写规则的困境。

我遵循了这两个指南,它们似乎是你能得到的最官方的指南: http://evansolomon.me/notes/faster-wordpress-multisite-nginx-batcache/ http://codex.wordpress.org/Nginx#WordPress_Multisite_Subdirectory_rules

它部分起作用了:

但其他永久链接(例如这两个指向帖子或静态页面的永久链接)不起作用:

它们要么将您带到 404 错误,要么带您到其他博客!

这是我的配置:

server {
    listen       80 default_server;
    server_name  blog.ssis.edu.vn;
    root         /var/www;

    access_log   /var/log/nginx/blog-access.log;
    error_log    /var/log/nginx/blog-error.log;

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

    }

    # Add trailing slash to */wp-admin requests.
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    # Add trailing slash to */username requests
    rewrite ^/[_0-9a-zA-Z-]+$ $scheme://$host$uri/ permanent;

    # Directives to send expires headers and turn off 404 error logging.
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }

    # this prevents hidden files (beginning with a period) from being served
      location ~ /\.          { access_log off; log_not_found off; deny all; }

    # Pass uploaded files to wp-includes/ms-files.php.
    rewrite /files/$ /index.php last;

    if ($uri !~ wp-content/plugins) {
        rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
    }

    # Rewrite multisite '.../wp-.*' and '.../*.php'.
    if (!-e $request_filename) {

        rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
        rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last;
        rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;

    }

    location ~ \.php$ {
    # Forbid PHP on upload dirs
        if ($uri ~ "uploads") {
            return 403;
        }

        client_max_body_size 25M;
        try_files      $uri =404;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
}

欢迎提出任何想法!我做错了什么吗?我已禁用 Batcache 以查看是否有任何不同,但仍然没有效果。

答案1

哇,你真是麻烦了。

总体而言,nginx 配置看起来不错。第一次阅读时,唯一让我感到“错误”的是以下声明try_files。在我的生产 WordPress 多站点中,我有:

try_files $uri $uri/ index.php;

没有必要附加参数,因为 WordPress 会在参数REQUEST_URI可用时(几乎总是)选择它们,并且PATH_INFO当它们不在查询字符串中时也会选择它们。

是的,我知道您使用的声明是 WordPress 网站上“推荐”的。当然,它也是一个任何人都可以编辑的 wiki,因此必须谨慎对待,就像 Wikipedia 一样。

答案2

找到问题了。这不是重写规则的问题,尽管 Michael Hampton 确实为我指明了正确的方向。

由于某种原因,wp-config.php 文件中两行对于 Multisite 配置非常重要的行被注释掉了:PATH_CURRENT_SITE 和 BLOG_ID_CURRENT_SITE。

我修复这个问题后,一切都开始完美运行,我们的网站现在运行速度非常快。我想真正的问题是:这一切到底是怎么做到的?

就到这里。谢谢观看!

相关内容