使用.htaccess实现http转https并移除URL中public路径问题求助
问题原因
- 现有移除
public的重写规则缺少[L]终止标记,也没有配置外部重定向,无法更新用户地址栏的URL - 服务器默认的根目录跳转逻辑和重写规则冲突:重写移除
public后,服务器又会自动把路径跳回/public下,反复触发就会出现路径无限拼接/public的问题
解决配置
第一步:根目录(website/下)的.htaccess
RewriteEngine On # HTTP跳转HTTPS RewriteCond %{SERVER_PORT} 80 [OR] RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 地址栏带/public的请求直接301跳转到不带public的路径 RewriteCond %{REQUEST_URI} ^/public/(.*)$ RewriteRule ^ /%1 [L,R=301] # 内部静默转发所有请求到public目录,地址栏不变化 RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]
第二步:public目录(website/public/下)新增.htaccess
适配你的MVC架构,不存在的静态资源/路径全部转发到入口文件index.php:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?$1 [L,QSA]
生效注意事项
- 配置修改完成后先清除浏览器缓存,301重定向会被浏览器永久缓存,旧缓存会导致新规则不生效
- 确认你的Apache服务已经开启
mod_rewrite模块,且站点配置中AllowOverride参数设置为All,允许.htaccess覆盖规则
内容的提问来源于stack exchange,提问作者Quentin
相关产品推荐
相关产品推荐

