.htaccess SSL重定向与session_start()和头(“位置”)冲突

oug3syen  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个使用php会话和php头位置重定向的网站。它运行得很好,没有任何问题。当我试图编辑htaccess文件来重定向所有非https请求时,问题就开始了。我使用了下面的代码来发送重定向。

# Force HTTPS and WWW
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{https} off  
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

上面的代码在重定向非https请求时工作得很好,但是它会使session_start();函数和标头位置函数停止工作。
我收到以下错误

**PHP Warning:  session_start(): Cannot start session when headers already sent in  ** where i try to start the session.

一旦我删除了ssl重定向,一切都很好。我真的想重定向所有非https请求,而不影响会话和头位置重定向。
我试过寻找类似的问题,但没有运气。任何人有解决办法,请帮助

lg40wkob

lg40wkob1#

谢谢你的努力。
我一直在尝试任何ssl重定向代码在网络上和下面的代码完美的工作没有造成任何错误的session_start和头部位置。

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [L,R=301]

上面的代码实际上重定向了任何非ssl请求,没有任何问题......有人能解释一下为什么这段代码工作正常,而另一段代码不行吗?我的假设是,它们都必须工作,因为它们做的是相同的工作
下面的代码会导致错误,并阻止会话启动和标头定位

# Force HTTPS and WWW
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{https} off  
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301

任何熟悉apache的人都可以试着比较一下为什么第一个代码可以工作而不会导致错误,而第二个代码可以工作但会导致错误。

相关问题