Wordpress Multisite,不同的域,可选的子目录和htaccess

时间:2015-03-26 19:35:36

标签: wordpress .htaccess multisite

情况如下:

配置

我有一个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如何很好地互动来做到这一点。

有人有任何建议吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

为任何可能偶然发现此问题的人找到了解决方案。基本上,标准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