wordpress 中 wp-admin 的子目录和代理 URL 错误

wordpress 中 wp-admin 的子目录和代理 URL 错误

我正在使用 apache2 和 mod-proxy 将 wordpress 博客集成到我的 TLD 的子目录中。

带代理的主站点的 Apach2 虚拟主机:

<VirtualHost *:80>
ServerName example.com

...

# Rewrite rule to add missing slashes
RewriteRule ^/blog$ /blog/ [R=301]
RewriteRule ^/other-blog$ /other-blog/ [R=301]

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyRequests off
ProxyPass /blog/ http://blog1.localhost/
ProxyPassReverse /blog/ http://blog1.localhost/
ProxyPass /other-blog/ http://blog2.localhost/
ProxyPassReverse /other-blog/ http://blog2.localhost/

...

</VirtualHost>

博客的 Apach2 虚拟主机:

<VirtualHost *:80>
ServerName blog1.localhost
DocumentRoot /var/www/blog1/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

Linux hosts 文件添加行:

127.0.0.1     blog1.localhost localhost.localdomain
127.0.0.1     blog2.localhost localhost.localdomain

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>

这种设置总体上工作正常。不幸的是,Wordpress 的后端在某些部分存在问题,它会删除 URL 中的子文件夹,从而导致保存设置或加载图片时出现问题。例如:

或者

我到目前为止尝试过的:

到目前为止,这些都没有任何效果,也没有使情况变得更糟。

如果有人知道如何解决这个问题我将不胜感激。

*)编辑:我在这里已经尝试过:

define('WP_HOME',  'http://' . $_SERVER['HTTP_HOST'] . '/blog');
define('WP_HOME', 'http://example.com/blog');
define('WP_SITEURL', 'http://example.com' . $_SERVER['SERVER_NAME'] . '/blog');
define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/blog');
define('WP_SITEURL', 'http://example.com/blog/');

答案1

绝对(和错误)路径位于 WordPress 生成的内容中 - 无法使用 Apache 重写它们(当客户端请求时,Apache 如何知道指的是哪个博客/wp-content?)。

修改WordPress配置中的站点URL是正确的路径。

对于 blog1 实例:

define('WP_SITEURL', 'http://example.com/blog');

对于 blog2 实例:

define('WP_SITEURL', 'http://example.com/other-blog');

您尝试过什么?看到了什么行为?

答案2

您可能需要将 wordpress 安装移至子目录来解决此问题。完成后,将您的重写规则编辑为类似以下内容:

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

相关内容