Laravel网站永久https重定向并删除' public'来自url with htaccess

时间:2016-07-04 09:28:20

标签: apache .htaccess https laravel-5

我已通过在.htaccess

中应用以下代码从网址中删除了公共字词
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

毫无疑问,它正在发挥作用。但也试图将永久重定向http设置为https。在.htaccess中使用以下代码:

RewriteEngine on
RewriteCond %{HTTPS} !^on
RewriteRule ^(.*)$ public/$1 [L]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

请告诉我问题在哪里?它应该从url中删除公用文件夹以及永久重定向到https URL

1 个答案:

答案 0 :(得分:1)

RewriteCond仅适用于 next RewriteRule

  

RewriteCond指令定义规则条件。一个或多个RewriteCond可以在RewriteRule指令之前。然后仅在URI的当前状态与其模式匹配且满足这些条件时才使用以下规则

因此,在您的情况下,您必须在第二个RewriteCond前面移动RewriteRule

RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{HTTPS} !^on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

虽然,既然你想强制执行HTTPS,你应该把它移到前面,例如

RewriteCond %{HTTPS} !^on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteRule ^(.*)$ public/$1 [L]

如果一切正常,您可以将R替换为R=301。切勿使用R=301进行测试。