WordPress多站点下用.htaccess修复wp-content路径缺失CSS/JS问题
解决WordPress多站点隐藏子目录后主站资源加载问题
核心问题分析
主站CSS/JS资源请求路径为http://www.example.com/wp-content/,但实际文件存储在http://www.example.com/wordpress/wp-content/,当前.htaccess规则未正确处理静态资源的重写逻辑,导致资源加载失败。
解决方案步骤
1. 修正根目录(public_html/.htaccess)规则
替换现有内容为以下代码,优先处理静态资源的路径跳转,确保请求直接指向wordpress子目录:
<IfModule mod_rewrite.c> RewriteEngine On # 优先转发主站静态资源请求到wordpress子目录 RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^wp-(content|admin|includes)/(.*)$ /wordpress/wp-$1/$2 [L] # 处理非文件/目录的请求转发到wordpress RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteCond %{REQUEST_URI} !^/wordpress/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /wordpress/$1 [L] # 处理首页请求 RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^(/)?$ /wordpress/index.php [L] </IfModule>
2. 调整WordPress子目录(public_html/wordpress/.htaccess)规则
修改RewriteBase为根目录,适配隐藏子目录的访问逻辑:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] # 给/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] </IfModule>
3. 删除wp-content目录下的.htaccess
你新建的public_html/wordpress/wp-content/.htaccess会干扰重写逻辑,直接删除即可。
4. 验证WordPress站点配置
登录WordPress后台,检查主站的URL设置:
- 进入网络管理 > 站点 > 主站 > 编辑
- 确认**站点地址(URL)和主页地址(URL)**均为
http://www.example.com,不要包含/wordpress - 保存设置后刷新主站,测试资源加载是否正常
规则失效原因说明
- 你之前尝试的
RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]使用了绝对路径(开头的/),在根目录.htaccess中,RewriteRule的匹配是去掉根目录的部分,正确写法应为^wp-content/(.*)$ - 静态资源的重写规则需要放在最前面,优先于其他转发规则,否则会被后续规则覆盖,无法生效
内容的提问来源于stack exchange,提问作者bowlerae
相关产品推荐
相关产品推荐

