【问题标题】:WordPress in a subdirectory behind a reverse proxy反向代理后面的子目录中的 WordPress
【发布时间】:2017-02-05 23:18:58
【问题描述】:

我在专用的 Apache 服务器上运行电子商务网站。我还有一个可以通过http://www.example1.com/blog 访问的博客,但该博客与电子商务网站不在同一台机器上。为此,我在主电子商务服务器上设置了一个反向代理,以便在人们尝试访问http://www.example1.com/blog 时为http://www.example2.com/ 提供服务。第二台服务器是一个 AWS EC2 实例,它使用 Bitnami 的 AMI 运行 WordPress,并带有防火墙规则,使其只能由我们的电子商务服务器访问。

在 WordPress 中,我的站点 URL 和主页 URL 设置都设置为 http://www.example1.com/blog。我的 WordPress 服务器的 .htaccess 配置如下:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

在大多数情况下,这运作良好。主博客页面及其上的所有 HREF 都按预期以http://www.example1.com/blog 开头。我的问题是没有正确处理重定向。例如,在帖子的漂亮 URL(如 http://www.example1.com/blog/my-post)上留下一个斜杠会错误地重定向到 http://www.example1.com/my-post/(请注意,缺少“博客”子目录)。这个问题也影响了我们使用 wp-admin 界面的能力,因为它也从重定向中剥离了“blog”子目录。

我确定我在博客服务器的 Apache 和/或 WordPress 配置中做错了什么,但在修修补补了很长时间之后,我一直无法弄清楚。

我该如何解决这个问题?

编辑:

为了澄清,在博客服务器上,WordPress 安装在站点根目录中,而不是子目录中。通过主电子商务服务器上的以下 Apache 反向代理规则,它就像在子目录中一样被简单地访问:

ProxyPreserveHost On
ProxyRequests Off   
<Location "/blog">
    ProxyPass http://www.example2.com
    ProxyPassReverse http://www.example2.com
    Order allow,deny   
    Allow from all
</Location>

【问题讨论】:

  • 任何解决方案???
  • 我也有同样的问题。你找到解决办法了吗?谢谢。
  • 我没有找到满意的解决方案,但我通过将 Wordpress 安装移动到“博客”子目录来解决这个问题。一切都这样,但目录结构并不理想。

标签: wordpress apache .htaccess redirect


【解决方案1】:

通常会这样。在您的 .htaccess 文件中,您有以下规则:

RewriteBase /blog/

但是您的 wordpress 没有安装在您的主域中,而是安装在子文件夹中。

因此,当您根据 .htaccess 文件中的规则执行 http://example.com/blog 时,它会重写基本 URL 并删除 /blog/

只需将您博客的 .htaccess 文件修改为如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

这应该可以解决问题!

【讨论】:

  • 感谢您的建议。不幸的是,这并没有奏效。应用您的 .htaccess 建议后,当我从客户端运行 curl -i http://www.example1.com/blog/my-post 时,我仍然会收到以下位置标头:Location: http://www.example1.com/my-post/。我认为主要的误解是在博客服务器上,WordPress 安装在站点根目录中,而不是子目录中。我将编辑我上面的原始问题以澄清这一点。
猜你喜欢
  • 2012-02-02
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2016-11-13
  • 2010-11-09
  • 2019-08-31
  • 2021-12-17
相关资源
最近更新 更多