从 Apache 到 Nginx 的静态 Wordpress 多站点规则

从 Apache 到 Nginx 的静态 Wordpress 多站点规则

我已经阅读并尝试了 3 天,但似乎无法获得正确的规则组合来执行 Apache2 服务器所做的事情。

Apache2 规则是:

RewriteRule ^/about/(wp-(content|admin|includes).*) /wordpress/$1 [L]
RewriteRule ^/about/(.*\.php)$ /wordpress/$1 [L]
RewriteRule ^/about/(.*) /wordpress/index.php [L]

它只是检测静态 slug /about/,并在传递给 PHP 之前默默地/wordpress/在前面添加了一个。

但是,使用 Nginx 时,进行重写并将静默重写传递给 PHP 是没有意义的。

在 Nginx 中我有:

location ~ ^/about/(wp-(content|admin|includes).*) {
   try_files /wordpress/$1 =404;
}

location ~ ^/about/(.*\.php)$ {
   try_files /wordpress/$1 =404;
}

location ~ ^/about/(.*) {
   try_files /wordpress/index.php =404;
}

location ~ \.php$ {
   try_files $uri =404;
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_pass unix:/var/run/php5-fpm.sock;
}

为了进行故障排除,所有其他位置指令均被注释掉。

/about/- 尝试下载二进制文件。

/about/index.php- 尝试下载二进制文件。

/about/wp-admin/- 产生 404 未找到。

使用基本 Nginx 配置时,PHP-FPM 可以正常工作。我认为前两个规则没有将重写的 URL 传递到后端。我在这里做错了什么?

答案1

location ^~ /about/ {
    rewrite ^/about/(wp-(content|admin|includes).*) /wordpress/$1 last;
    rewrite ^/about/(.+\.php)$ /wordpress/$1 last;
    rewrite ^ /wordpress/index.php last;
}

location ~ \.php$ {
    ...
}

相关内容