2

我们有一个带有子目录类型站点结构的 Wordpress 4.9.4 多站点。不是直接安装在 www 中,而是安装在子目录中。

基本网址如:http://aa/a
网站网址如:http://aa/a/a
页面网址如:http://aa/a/a/a
永久链接在任何设置。

我们开始使用内置的 Wordpress 功能(无插件)将域映射到子站点,方法是在 Sites->Site->Edit 中设置新域名,
例如:http://aa/a/a -> http:// bb

在wp_options表中设置了两个相关值(home 和 base url),并且站点正在运行。

问题:我们只能使用默认的永久链接结构,因为任何其他都会引发 500 内部服务器错误。
例如:http://bb/?page_id=10有效,http://bb/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$ $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]

问题:我们怎样才能使http://bb/b类型的永久链接起作用?

编辑: 经过长时间的搜索和反复试验,我找到了一个半解决方案。

在永久链接设置中选择自定义结构,然后输入index.php/%postname%

这种方式虽然我们必须使用http://bb/index.php/b链接结构,但至少它不是?page_id=123。Wordpress 已经有从 url 中删除 index.php 的规则,但它似乎没有扩展到映射域。

您知道从映射域中的 url 中消除 index.php 的方法吗?

4

1 回答 1

0

修改后的 HTACCESS 有效:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
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).*) a/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ a/$2 [L]
RewriteRule . index.php [L]

此外,请确保 .htaccess 所有者用户具有 mod_rewrite 模块的正确访问权限和使用权限。

于 2019-01-03T22:57:20.530 回答