WordPress多站点迁移新VPS后子站点图片无法访问求助
解决WordPress多站点迁移后子站点图片403无法显示的问题
嘿,我之前处理过好几个类似的WordPress多站点迁移后图片失效的案例,咱们一步步来排查解决:
1. 先修正数据库里的旧IP/域名指向
你提到图片URL还指向旧服务器,这说明WordPress数据库里的站点地址、附件地址还没更新成新IP。这是迁移多站点最容易忽略的点:
- 如果用WP-CLI(推荐,效率高),直接在站点根目录跑这条命令,记得替换旧IP:
wp search-replace '旧服务器IP地址' '217.70.34.131' --network-wide--network-wide参数很关键,它会遍历整个多站点的所有数据库表进行替换。 - 如果没有WP-CLI,就用phpMyAdmin:打开数据库,选择所有表,用“搜索替换”功能,把旧IP替换成新IP
217.70.34.131。
2. 排查/wp-includes/ms-files.php的权限与服务器配置
错误提示明确是禁止访问这个文件,这是WordPress多站点用来转发媒体文件请求的核心文件,得重点检查:
- 文件权限:确保
ms-files.php的权限是644,它所在的/wp-includes目录权限是755。可以用命令调整:chmod 644 /path/to/your/wp-includes/ms-files.php chmod 755 /path/to/your/wp-includes - 服务器重写规则:
- 如果你用Apache,检查根目录的
.htaccess文件,必须包含多站点的标准重写规则(如果迁移时没同步这个文件,大概率会出问题):RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # 给/wp-admin添加尾部斜杠 RewriteRule ^wp-admin$ wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^(wp-(content|admin|includes).*) $1 [L] RewriteRule ^(.*\.php)$ $1 [L] RewriteRule . index.php [L] - 如果你用Nginx,要在站点配置里添加针对
ms-files.php的规则,确保它能被正确解析:location / { try_files $uri $uri/ /index.php?$args; } location ~* ^/wp-includes/ms-files.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 替换成你服务器的PHP-FPM路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; allow all; # 确保允许访问这个文件 }
- 如果你用Apache,检查根目录的
3. 验证媒体文件的权限与归属
虽然你说磁盘里有图片,但Web服务器可能没有读取权限:
- 把
wp-content/uploads目录的归属改成Web服务器用户(比如Apache的apache,Nginx的www-data):chown -R www-data:www-data /path/to/your/wp-content/uploads - 目录权限设为
755,文件权限设为644:find /path/to/your/wp-content/uploads -type d -exec chmod 755 {} \; find /path/to/your/wp-content/uploads -type f -exec chmod 644 {} \;
4. 检查多站点后台的站点配置
最后,登录WordPress网络管理后台,进入「站点」-> 编辑每个子站点:
- 确认「站点地址(URL)」和「首页地址(URL)」都已经改成新IP或域名,而不是旧服务器的地址。
- 清空所有缓存(包括插件缓存、服务器缓存),避免旧URL被缓存导致问题。
按这个顺序排查下来,基本能解决你遇到的图片403和URL指向错误的问题。
内容的提问来源于stack exchange,提问作者Webking
相关产品推荐
相关产品推荐

