使用 Nginx 更改 Wordpress Multisite Blog 的 URL - proxy_pass?带有正则表达式错误的位置

使用 Nginx 更改 Wordpress Multisite Blog 的 URL - proxy_pass?带有正则表达式错误的位置

我在 AWS 上设置了一个 Wordpress Multisite(又名 WPMU)实例来为我的四个博客提供服务,这些博客目前都是单站点安装。其中三个博客在域根目录上运行,但其中一个需要从 /blog/ 提供服务,因为我在根目录上有一个自定义编写的网站。由于软件的限制,我无法让 WPMU 从子目录为博客提供服务,尽管单站点 Wordpress 可以做到这一点,所以我想看看是否可以使用 Nginx 来实现。

我的退路是安装单个站点的 Wordpress,我宁愿避免这样做,因为它会增加维护和备份开销。另一个退路是将博客放在子域中,这对 SEO 来说不太好,所以我也真的宁愿避免这样做。

我有非常开放其他解决方案,将博客放入子目录,运行 WPMU

在观众看来应该是这样的

example.com  <- Viewer sees custom PHP application
example.com/blog/  <- Viewer sees WPMU blog
blog.example.com   <- hidden from viewers

我认为可以这样设置

example.com <- Runs custom PHP written application
blog.example.com   <- WPMU runs on a subdomain, mapped to a subfolder of the main domain by Nginx

我认为应该可以重写一些东西来使用 Nginx 与 Wordpress Multisite 配合使用,但我不太明白。proxy_pass 对于静态网站来说工作得很好(无法发布配置,我的声誉不足以发布那么多链接),但我遇到了错误

“proxy_pass” 不能在正则表达式给出的位置中包含 URI 部分”(等等)

我见过有人在 nginx 中用重写做一些棘手的事情,使它能够正常工作,但我做不到。有人能帮忙吗?

我在下面发布了一些在我当前配置中起作用的相关位置块 - 当然,所有静态资源 js/css/jpeg/etc 都需要重定向,因为 WPMU 仍会生成引用子域的 html

# We want all resources in the wp-content/uploads/20x and uploads/galleries   
# folders to redirect to wp-content/uploads/sites/$blogid/whatever
location ~* "wp-content\/uploads\/((\d{4,}\/\d{2,}|galleries).*)" {
  alias    /var/www/wordpress/wp-content/uploads/sites/$blogid/$1;
  return 301 $scheme://$host/wp-content/uploads/sites/$blogid/$1;
}

# Set caching headers for images
location ~*  \.(jpg|jpeg|png|gif|css|js)$ {
  log_not_found off; access_log off;
  add_header Cache-Control "public";
  expires 4h;
}

# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
  fastcgi_keep_conn on;
  fastcgi_intercept_errors on;
  fastcgi_pass   php;
  include        fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

如果这是一个没有正则表达式的简单块,就像我的静态测试一样,那么像这样的东西可能会起作用

# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
  proxy_pass http://example.com
  fastcgi_keep_conn on;
  fastcgi_intercept_errors on;
  fastcgi_pass   php;
  include        fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

答案1

以下是有关如何执行此操作的分步指南:

https://yuji.wordpress.com/2010/03/08/nginx-wordpress-proxy-subdirectory-to-wordpress-subdomain/

最后,作者建议不要这么做。为了避免他的一些不好的经历,我会采取不同的做法,那就是 URL 重写。可以使用 nginx 字符串子模块来完成,而不是在 Wordpress 中完成:

http://nginx.org/en/docs/http/ngx_http_sub_module.html

此链接对代理与重写有进一步的解释:

https://stackoverflow.com/questions/9233368/nginx-server-configuration-subdomain-to-folder

并且不要忘记结尾的斜杠:

反向代理 - 删除子目录

相关内容