Laravel 11下.htaccess全页面www转非www并HTTPS 301重定向问题
解决Laravel 11中www转非www并强制HTTPS全页面重定向问题
你的现有规则仅处理了HTTP转HTTPS,未覆盖www到非www的重定向,且规则位置可能错误,导致仅首页生效。按以下方案修改:
1. Apache环境:调整.htaccess配置
将重定向规则放在.htaccess文件最顶部(RewriteEngine On之后,Laravel自带规则之前):
# 强制HTTPS并处理www域名重定向 RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] # 移除www前缀,确保最终域名无www RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
如果域名固定,可使用更高效的写法(替换yourdomain.com为实际域名):
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR] RewriteCond %{HTTP_HOST} ^www\.yourdomain\.com$ [NC] RewriteRule ^ https://yourdomain.com%{REQUEST_URI} [L,R=301,NE]
2. 关键注意事项
- 规则顺序:必须将重定向规则放在Laravel自带的路由转发规则之前,否则请求会先被Laravel处理,重定向无法触发。
- 清除缓存:301是永久重定向,浏览器会缓存旧规则,测试时请使用隐私窗口或清空浏览器缓存。
- 反向代理适配:如果使用Nginx、Cloudflare等反向代理,需确保
X-Forwarded-Proto头被正确传递,否则规则无法识别HTTPS状态。
3. Nginx环境配置
若服务器使用Nginx,在站点配置的server块中添加:
# 处理HTTP请求,强制跳转至HTTPS非www域名 server { listen 80; listen [::]:80; server_name www.yourdomain.com yourdomain.com; return 301 https://yourdomain.com$request_uri; } # 处理www的HTTPS请求,跳转至非www域名 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.yourdomain.com; return 301 https://yourdomain.com$request_uri; } # 主站点配置(Laravel核心规则) server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com; root /path/to/laravel/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } # 其他Laravel相关Nginx配置... }
内容的提问来源于stack exchange,提问作者Mordad Khezerlou
相关产品推荐
相关产品推荐

