WordPress在反向代理后面的子目录中

时间:2017-02-05 23:18:58

标签: wordpress apache .htaccess redirect

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

在WordPress中,我的网站网址和首页网址设置都设置为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开头。我的问题是没有正确处理重定向。例如,将帖子的漂亮网址(例如http://www.example1.com/blog/my-post)上的尾部斜线错误地重定向到http://www.example1.com/my-post/(请注意,缺少&#34;博客&#34;子目录)。这个问题也影响了我们使用wp-admin界面的能力,因为它也剥离了&#34;博客&#34;重定向的子目录。

我确定我在博客服务器的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>

1 个答案:

答案 0 :(得分:0)

通常会发生这种情况。在.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

这应该可以做到!