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
Это частично работает:
- http://blog.ssis.edu.vn/ работает.
- http://blog.ssis.edu.vn/umasse/ работает.
Но другие постоянные ссылки, такие как эти две на пост или статическую страницу, не работают:
- http://blog.ssis.edu.vn/umasse/2008/12/12/hello-world-2/
- http://blog.ssis.edu.vn/umasse/sample-page/
Они либо приведут вас к ошибке 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, чтобы увидеть, имеет ли это какое-то значение, но все равно нет.
2 ответа
Нашел проблему. Это были не правила переписывания, хотя Майкл Хэмптон определенно указывал мне правильное направление.
По какой-то причине файл wp-config.php содержал две очень важные строки для конфигурации мультисайта: PATH_CURRENT_SITE и BLOG_ID_CURRENT_SITE.
Как только я это исправил, все стало работать отлично, и наш сайт теперь работает быстро. Я предполагаю, что реальный вопрос: как, черт возьми, это работало все это время?
Вот и все. Спасибо за просмотр!
Вау, у тебя в руках настоящий беспорядок.
В целом конфигурация nginx выглядит хорошо. Единственное, что поразило меня в первом чтении, что, возможно, "неправильно", было try_files
заявление. В моем многосайтовом WordPress я имею:
try_files $uri $uri/ index.php;
Нет необходимости добавлять аргументы, так как WordPress забирает их из REQUEST_URI
когда это доступно, (почти всегда) и PATH_INFO
когда их нет в строке запроса.
Да, я знаю, что заявление, которое вы используете, это то, что "рекомендуется" на сайте WordPress. Конечно, это также вики, которую каждый может редактировать, поэтому его нужно использовать с небольшим количеством соли, как в Википедии.