【问题标题】:rewriting url with htaccess from http to https + rewriting url displayed使用 htaccess 将 url 从 http 重写为 https + 显示重写 url
【发布时间】:2021-12-28 18:38:49
【问题描述】:

我目前正在尝试设置一个 .htaccess 文件,但我有点挣扎,因为我们还没有在学校学习它。

目标是将http重写为https并更改看到的url以删除可见的/public/。

我的文件夹是这样的

website
   config
      ~
   controller
      ~
   model
      ~
   public
      index.php
   view
      ~

而且服务器似乎自动将用户从https://mywebsite.com 发送到https://mywebsite.com/public

我的 htaccess 看起来像这样

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

所以我设法设置了 https。但是每次我尝试将 url 从 mywebsite.com/public/ 更改为 mywebsite.com 时,它都保持不变,我会回到根目录,如果我尝试手动进入公共过滤器,我最终会得到mywebsite.com/public/public/ 每次尝试访问该文件夹时都有一个 public/。 有人可以帮忙吗?

【问题讨论】:

    标签: apache .htaccess model-view-controller https url-rewriting


    【解决方案1】:

    这可能就是你要找的:

    RewriteEngine On
    
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    RewriteRule ^/?public/(.*)$ /$1 [R=301,L]
    
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^ /public%{REQUEST_URI} [END]
    

    最好从R=302 临时 重定向开始,然后只将其更改为R=301 永久 重定向,您对所有内容都感到满意。这可以防止客户端出现令人讨厌的缓存问题...

    【讨论】:

    • 当我尝试您的解决方案时,我收到了 ERR_TOO_MANY_REDIRECTS 错误。我昨天也试过了,结果相同:/
    • 这些重定向是什么?请检查浏览器控制台中的顺序。规则对我来说看起来不错......
    • 它进入根目录,然后是 /public/,然后是根目录,然后是 /public/,等等
    • 请使用新的匿名浏览器窗口再次测试,以防止出现缓存问题。如果这不起作用,那么我怀疑您还有其他尚未在此处提及的额外重写。
    • 我被说服我回答了。但是是的,在最后添加 END 是可行的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 2014-09-20
    • 2011-06-02
    • 1970-01-01
    • 2017-05-04
    • 2015-05-22
    • 2021-01-30
    • 2012-07-23
    相关资源
    最近更新 更多