多站点、不同域、可选子目录和htaccess

时间:2015-03-26 作者:isUsername

情况如下:

配置我有一个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配置的相关部分。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 个回复
SO网友:isUsername

为任何可能偶然发现这一点的人找到了解决方案。基本上,标准WordPress htaccess的每个部分现在都有两个重写条件:一个用于在子文件夹中时重写,另一个用于不在子文件夹中时重写。根据该评估,将应用适当的重写规则。

# 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

结束

相关推荐

在WordPress上移动时需要编辑htaccess

我正在将我的网站从另一个CMS移动到WordPress。我现在有这个。htaccess# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /atoponwp/ RewriteRule ^index\\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}