【问题标题】:Laravel website permanent https redirection and remove 'public' from url with htaccessLaravel 网站永久 https 重定向并使用 htaccess 从 url 中删除“public”
【发布时间】:2016-11-05 23:29:59
【问题描述】:

我通过在 .htaccess 中应用以下代码从 url 中删除了公共字词

<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

【问题讨论】:

  • 为什么不直接将域指向 /public 文件夹?
  • 您需要将强制 HTTPs 的规则移到您的常规规则之上。

标签: apache .htaccess https laravel-5


【解决方案1】:

RewriteCond 仅适用于下一个 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 进行测试。

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2020-01-20
    • 2023-03-20
    • 2020-01-17
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多