WordPress 4.9.4子目录多站点域名映射后固定链接失效求助
我之前踩过几乎一模一样的坑——WordPress 4.9.4子目录架构多站点,安装在非根目录下,用内置功能做域名映射后固定链接直接罢工。给你几个不用插件就能搞定的排查和修复步骤,亲测有效:
检查并调整.htaccess规则
子目录安装的多站点默认.htaccess规则是针对原子站点URL的,映射新域名后需要添加适配规则。找到WP安装根目录(也就是http://a.a对应的服务器目录)下的.htaccess,修改成类似这样:RewriteEngine On RewriteBase /a/ RewriteRule ^index\.php$ - [L] # 适配新映射的域名b.b RewriteCond %{HTTP_HOST} ^b\.b$ RewriteRule ^(.*)$ /a/a/$1 [L] # 原多站点核心重写规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /a/index.php [L]这段规则的作用是:当请求来自
b.b时,自动将请求转发到子站点的实际物理目录/a/a/,让WordPress能正确解析固定链接的路径。确认siteurl和home参数的正确性
你提到配置了home参数,但别忽略siteurl。子站点的wp_options表中,siteurl应该保留原有的http://a.a/a/a(WP实际安装的路径),home才是新映射的域名http://b.b。如果怕后台设置出问题,可以直接在子站点的wp-config.php里添加常量强制设置:define('WP_HOME','http://b.b'); define('WP_SITEURL','http://a.a/a/a');强制刷新固定链接规则
这步很多人容易忘,但至关重要!通过原子站点URL(http://a.a/a/a/wp-admin)登录后台,进入「设置」→「固定链接」,不需要修改任何选项,直接点击「保存更改」。这会让WordPress重新生成适配新域名的重写规则,覆盖旧的配置。检查服务器虚拟主机配置
- 如果你用的是Apache:确保虚拟主机配置中开启了
AllowOverride All,让.htaccess的规则能生效,同时DocumentRoot指向http://a.a对应的服务器根目录。 - 如果你用的是Nginx:需要给
b.b单独配置虚拟主机,指向子站点的实际路径,示例配置如下:server { listen 80; server_name b.b; root /path/to/your/www/directory; # 对应http://a.a的服务器根目录 index index.php index.html; location / { try_files $uri $uri/ /a/a/index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 根据你的PHP版本调整路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- 如果你用的是Apache:确保虚拟主机配置中开启了
清除所有缓存
包括浏览器缓存、服务器端的缓存(比如OPcache、Redis等),旧缓存可能会导致链接跳转异常,清完再测试固定链接。
按这个顺序操作下来,大概率能解决你的固定链接失效问题。
内容的提问来源于stack exchange,提问作者Vörös Imi

