Назад | Перейти на главную страницу

Nginx + Wordpress Multisite 3.4.2 + подкаталоги + статические страницы и постоянные ссылки

Я пытаюсь настроить Wordpress Multisite, используя подкаталоги, с Nginx, php5-fpm, APC и Batcache. Как и многие другие, я застреваю в правилах перезаписи постоянных ссылок.

Я следовал этим двум руководствам, которые кажутся настолько официальными, насколько вы можете получить: 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, чтобы посмотреть, имеет ли это значение, но все равно не работает.

Нашел проблему. Это были не правила перезаписи, хотя Майкл Хэмптон определенно направил меня в правильном направлении.

По какой-то причине в файле wp-config.php были закомментированы две очень важные строки для конфигурации Multisite: PATH_CURRENT_SITE и BLOG_ID_CURRENT_SITE.

Как только я это исправил, все начало работать отлично, и теперь наш сайт работает быстро. Я предполагаю, что настоящий вопрос: как, черт возьми, это работало все это время?

Вот и все. Спасибо за просмотр!

Вау, у тебя в руках настоящий беспорядок.

В целом конфигурация nginx выглядит хорошо. Единственное, что мне показалось при первом чтении, возможно, "неправильным", это то, что try_files заявление. В моем производственном мультисайте WordPress у меня есть:

try_files $uri $uri/ index.php;

Нет необходимости добавлять аргументы, поскольку WordPress берет их из REQUEST_URI когда он доступен (почти всегда) и PATH_INFO когда их нет в строке запроса.

Да, я знаю, что заявление, которое вы используете, «рекомендуется» на сайте WordPress. Конечно, это также вики, которую может редактировать каждый, поэтому к ней нужно относиться с недоверием, как и к Википедии.