问题:https://example.com文件类URL无法301重定向至带www的HTTPS域名
问题解决方法
你的核心问题是HTTPS协议下不带www的域名(https://example.com)中的文件类URL未被重定向到带www的目标域名,原因是现有规则仅处理了HTTP协议的重定向,且部分重定向规则顺序错误,被WordPress的静态文件直接返回规则拦截。
修正后的.htaccess配置
将所有协议与域名的重定向规则统一移至WordPress规则块之前,同时补充HTTPS协议下不带www域名的重定向规则,完整代码如下:
# Block the include-only files. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule> # 统一处理协议与域名重定向(移至WordPress规则前) <IfModule mod_rewrite.c> RewriteEngine On # 处理HTTP转HTTPS+www RewriteCond %{HTTPS} !=on [NC] RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] # 处理HTTPS下不带www转带www RewriteCond %{HTTPS} =on [NC] RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] </IfModule> #Begin Really Simple Security Options -Indexes #End Really Simple Security # BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "END WordPress" are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
关键修改说明
- 规则顺序调整:将所有重定向规则移至WordPress规则块之前,避免静态文件(如图片、XML)被WordPress的
!-f条件拦截,无法进入重定向逻辑。 - 补充HTTPS重定向规则:新增
RewriteCond %{HTTPS} =on条件,专门处理HTTPS协议下不带www的域名,强制重定向到带www的目标地址。 - 合并冗余规则:删除原有的重复重定向规则,避免规则冲突,让逻辑更清晰。
注意事项
- 修改后建议清除浏览器缓存测试,避免旧的重定向缓存影响结果。
- 确保服务器已启用
mod_rewrite模块。
内容的提问来源于stack exchange,提问作者cjh
相关产品推荐
相关产品推荐

