【问题标题】:Wordpress Multisite, different domains, optional subdirectory, and htaccessWordpress 多站点、不同域、可选子目录和 htaccess
【发布时间】:2015-05-30 23:50:01
【问题描述】:

情况如下:

配置

我有一个 WordPress 多站点设置,其中不同的站点位于不同的域上。其中一些站点包含在其域中的子文件夹中,有些则不包含。对于它们位于子文件夹中的站点,所有站点的子文件夹名称都相同。

以下是示例:

  Site    |    URL
-----------------------
Main site | example.com
Site A    | sitea.com
Site B    | siteb.com/foo
Site C    | sitec.com/foo
Site D    | sited.com

这是我的 wp-config.php 的相关部分:

/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'example.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

这是我的 .htaccess:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress

问题

在此配置中,主站点和站点 A 和 D 工作,但站点 B 和 C 给出 500 错误。如果我将 RewriteBase / 更改为 RewriteBase /foo/,则相反:站点 B 和 C 工作,但主站点、站点 A 和站点 D 给出 500 错误。

如果RewriteBase /foo/ 的效果在有条件的基础上仅应用于URI 以/foo 开头的域,那么我认为这将解决问题。不幸的是,我不明白 WordPress 和 .htaccess 如何很好地交互来做到这一点。

有人有什么建议吗?

谢谢。

【问题讨论】:

  • 你试过域映射插件(wordpress.org/plugins/wordpress-mu-domain-mapping)吗?这是我用的
  • 在 WordPress 内置对多个域的支持之前,我曾经使用过它。我确实根据您的建议重新安装了它,但问题仍然存在。
  • 或者这个serverfault.com/questions/237231/…。基本上你不能有条件地设置RewriteBase,所以你需要根据需要将它放入RewriteRule(使用RewriteCond过滤)或者对每个域使用不同的.htaccess文件。
  • @doublesharp:谢谢。我使用 RewriteCond 基本上为每个 WordPress RewriteRule 执行 if/elses,这似乎有效。我在下面提出了解决方案。

标签: wordpress .htaccess multisite


【解决方案1】:

为可能偶然发现此问题的任何人找到了解决方案。基本上,标准 WordPress htaccess 的每个部分现在都有两个 RewriteConds:一个用于当它在子文件夹中时,另一个用于当它不在子文件夹中时。根据该评估,应用适当的 RewriteRule。

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteCond %{REQUEST_URI} ^/([_0-9a-zA-Z-]+/)wp-admin$
RewriteRule ^([_0-9a-zA-Z-]+/)wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+/)wp-admin$
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]


RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]


RewriteCond %{REQUEST_URI} ^/([_0-9a-zA-Z-]+/)(wp-(content|admin|includes).*)
RewriteRule ^([_0-9a-zA-Z-]+/)(wp-(content|admin|includes).*) $2 [L]

RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+/)(wp-(content|admin|includes).*)
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]


RewriteCond %{REQUEST_URI} ^/([_0-9a-zA-Z-]+/)?(.*\.php)
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+/)?(.*\.php)
RewriteRule ^(.*\.php)$ $1 [L]


RewriteCond %{REQUEST_URI} ^/foo/
RewriteRule . foo/index.php [L]

RewriteCond %{REQUEST_URI} !^/foo/
RewriteRule . index.php [L]


# END WordPress

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多