【问题标题】:.htaccess redirect destroys sessions due to pre-page load?.htaccess 重定向由于页面前加载而破坏会话?
【发布时间】:2017-02-01 00:06:51
【问题描述】:

我的 .htaccess 文件将我的页面重定向到 https 连接,并在需要时进行更多重定向。

但是,我有一个脚本可以检查是否设置了会话 (PHP)。如果是这样,我执行视觉操作并取消设置会话。但是,当 .htaccess 启动其重定向时,我会看到一毫秒的视觉效果,而在来自 .htaccess 的新重定向上,效果消失了,因为会话已经取消设置...

我希望它足够清楚,退出一个奇怪的故事,但是是的......它似乎直到现在才发生:(

提前感谢您的帮助!

附:结构简单:

1)。正在加载页面 -> 进行可视化和取消设置会话

2)。 .HTACCESS 通过重定向到 https 来启动

3)。正在加载页面 -> 没有视觉效果,因为第一步中已经未设置会话

【问题讨论】:

  • htaccess 将在 php 被调用之前被处理。如果 htaccess 重定向,则没有为该请求加载 php,浏览器被重定向,然后对重定向到的页面发出新请求。
  • 另外,请记住,对 http 和 https 的请求是完全独立的请求,就好像它们是完全不同的服务器一样。如果您通过 http 创建了会话,则通过 https 运行的站点将无法使用该会话。通过 http 设置的会话 cookie 不会通过 https 传递,因此会话不会恢复。
  • 乔纳森,感谢您的快速回复。但是,我几乎可以肯定我的页面会在重定向之前加载。我的 .htaccess 文件很好,因为 safari 按预期工作。但是,在重定向之前加载页面似乎是 chrome 和 Firefox 中的一个错误......
  • 那么执行重定向的不是 htaccess 文件。你能提供一个 htaccess 文件,也许是初始加载页面(minimal reproducible example)。如果您在重定向之前看到页面加载,我会假设是正在加载的页面进行重定向(元标记或 javascript),而不是 htaccess。你没有提供任何代码来检查,所以我们只是根据你所说的你正在做的事情来猜测实际发生的事情。
  • 另外,您可以尝试在有问题的浏览器中打开开发人员工具,转到网络选项卡,打开保留重定向选项并点击预期的站点。您可以查看每个请求以及发送的标头和内容,并实际查看重定向的内容,而不是仅仅猜测和假设。

标签: php .htaccess session redirect


【解决方案1】:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R=301,L]

在您的 htaccess 末尾使用此示例 如果你想重定向非 ssl 然后删除 https:// 并把 http://

如果您想使用子文件夹进行重定向,请使用以下代码

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} subfoldername
RewriteRule ^(.*)$ https://yourdomain.com/subfoldername$1 [R=301,L]

【讨论】:

  • 谢谢,但这根本不是问题的答案。我的 .htaccess 文件在 safari 上运行良好,这就是我不怀疑我的 .htaccess 文件的原因。除此之外,我还制作了更多 .htaccess 文件,所以我知道如何设置它们以重定向 https 等。感谢您的回复
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 2012-12-15
  • 1970-01-01
  • 2020-06-24
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多