域映射后 Wordpress 4.9.4 多站点(子目录)永久链接断开
Wordpress 4.9.4 multisite (subdirectory) permalinks broken after domain mapping
我们有一个 具有子目录类型站点结构的 Wordpress 4.9.4 多站点。不是直接安装在www,而是安装在子目录下。
基础url是这样的:http://a.a/a
站点 url 类似于:http://a.a/a/a
页面 url 就像:http://a.a/a/a/a
Permalinks 在任何设置下都正常工作。
我们开始使用内置的 Wordpress 功能(无插件)将域映射到子站点,方法是在“站点”->“站点”->“编辑”中设置新域名
例如:http://a.a/a/a -> http://b.b
在 wp_options table 中设置了两个相关值(home 和 base url)并且站点是 运行.
问题:我们只能使用默认的 permalink 结构,因为任何其他结构都会引发 500 内部服务器错误。
例如:http://b.b/?page_id=10 works, http://b.b/b 没有。
wp-config.php 包含以下内容(可能不相关):
// Multisite
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'a.a');
define('PATH_CURRENT_SITE', '/a/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
// Domain mapping cookie settings
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');
.htaccess:
RewriteEngine On
RewriteBase /a/
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ [L]
RewriteRule . index.php [L]
问题:我们怎样才能使 http://b.b/b 类型的 permalink 正常工作?
编辑:
经过长时间的搜索和反复试验,我找到了一半的解决方案。
在permalinks设置中选择Custom Structure,然后输入index.php/%postname%
这样虽然要用http://b.b/index.php/blink结构,但至少不是?page_id=123。 Wordpress 已经有从 url 中删除 index.php 的规则,但它似乎没有扩展到映射域。
你知道从映射域中的 url 中消除 index.php 的方法吗?
有效的修改后的 HTACCESS:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) a/ [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ a/ [L]
RewriteRule . index.php [L]
此外,请确保 .htaccess 所有者用户具有 mod_rewrite 模块的正确访问和使用权限。
我们有一个 具有子目录类型站点结构的 Wordpress 4.9.4 多站点。不是直接安装在www,而是安装在子目录下。
基础url是这样的:http://a.a/a
站点 url 类似于:http://a.a/a/a
页面 url 就像:http://a.a/a/a/a
Permalinks 在任何设置下都正常工作。
我们开始使用内置的 Wordpress 功能(无插件)将域映射到子站点,方法是在“站点”->“站点”->“编辑”中设置新域名
例如:http://a.a/a/a -> http://b.b
在 wp_options table 中设置了两个相关值(home 和 base url)并且站点是 运行.
问题:我们只能使用默认的 permalink 结构,因为任何其他结构都会引发 500 内部服务器错误。
例如:http://b.b/?page_id=10 works, http://b.b/b 没有。
wp-config.php 包含以下内容(可能不相关):
// Multisite
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'a.a');
define('PATH_CURRENT_SITE', '/a/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
// Domain mapping cookie settings
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');
.htaccess:
RewriteEngine On
RewriteBase /a/
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ [L]
RewriteRule . index.php [L]
问题:我们怎样才能使 http://b.b/b 类型的 permalink 正常工作?
编辑: 经过长时间的搜索和反复试验,我找到了一半的解决方案。
在permalinks设置中选择Custom Structure,然后输入index.php/%postname%
这样虽然要用http://b.b/index.php/blink结构,但至少不是?page_id=123。 Wordpress 已经有从 url 中删除 index.php 的规则,但它似乎没有扩展到映射域。
你知道从映射域中的 url 中消除 index.php 的方法吗?
有效的修改后的 HTACCESS:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) a/ [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ a/ [L]
RewriteRule . index.php [L]
此外,请确保 .htaccess 所有者用户具有 mod_rewrite 模块的正确访问和使用权限。