Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress多站点、不同域、可选子目录和htaccess_Wordpress_.htaccess_Multisite - Fatal编程技术网

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

Wordpress多站点、不同域、可选子目录和htaccess,wordpress,.htaccess,multisite,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

情况如下:

配置 我有一个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 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的每个部分现在都有两个重写条件:一个用于重写它在子文件夹中的时间,另一个用于重写它不在子文件夹中的时间。根据该评估,将应用适当的重写规则

# 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的每个部分现在都有两个重写条件:一个用于重写它在子文件夹中的时间,另一个用于重写它不在子文件夹中的时间。根据该评估,将应用适当的重写规则

# 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的每个部分现在都有两个重写条件:一个用于重写它在子文件夹中的时间,另一个用于重写它不在子文件夹中的时间。根据该评估,将应用适当的重写规则

# 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内置支持多个域之前,我就一直使用它。我确实根据你的建议重新安装了它,但是问题仍然存在。你检查过了吗?或者这个。基本上,您不能有条件地设置
RewriteBase
,因此您需要根据需要将其放入
RewriteRule
中(使用
RewriteCond
进行过滤),或者在每个域中使用不同的
.htaccess
文件。@doublesharp:谢谢。我使用RewriteCond基本上对每个WordPress RewriteRule执行if/elses fi,这似乎很有效。我提出了下面的解决方案。你试过域映射插件()吗?在WordPress内置支持多个域之前,我就一直使用它。我确实根据你的建议重新安装了它,但是问题仍然存在。你检查过了吗?或者这个。基本上,您不能有条件地设置
RewriteBase
,因此您需要根据需要将其放入
RewriteRule
中(使用
RewriteCond
进行过滤),或者在每个域中使用不同的
.htaccess
文件。@doublesharp:谢谢。我使用RewriteCond基本上对每个WordPress RewriteRule执行if/elses fi,这似乎很有效。我提出了下面的解决方案。你试过域映射插件()吗?在WordPress内置支持多个域之前,我就一直使用它。我确实根据你的建议重新安装了它,但是问题仍然存在。你检查过了吗?或者这个。基本上,您不能有条件地设置
RewriteBase
,因此您需要根据需要将其放入
RewriteRule
中(使用
RewriteCond
进行过滤),或者在每个域中使用不同的
.htaccess
文件。@doublesharp:谢谢。我使用RewriteCond基本上对每个WordPress RewriteRule执行if/elses fi,这似乎很有效。我提出了下面的解决方案。你试过域映射插件()吗?在WordPress内置支持多个域之前,我就一直使用它。我确实根据你的建议重新安装了它,但是问题仍然存在。你检查过了吗?或者这个。基本上,您不能有条件地设置
RewriteBase
,因此您需要根据需要将其放入
RewriteRule
中(使用
RewriteCond
进行过滤),或者在每个域中使用不同的
.htaccess
文件。@doublesharp:谢谢。我使用RewriteCond基本上对每个WordPress RewriteRule执行if/elses fi,这似乎很有效。我在下面提出了解决方案。