Nginx上的Codeigniter为表单生成https操作,但不生成Apache

Omi*_*gar 2 php apache https codeigniter nginx

我有一个带登录表单的Codeigniter应用程序.我在Apache和Nginx上运行它.在Apache上,一切正常,表单操作正常.但是在Nginx上,表单操作使用https而不是http(目前我不想要).

我用这个生成表单:

<?php echo form_open(site_url('/user/do_login')); ?>
Run Code Online (Sandbox Code Playgroud)

它产生了这个:

<form action="https://example.com/index.php/user/do_login" method="post" accept-charset="utf-8">
Run Code Online (Sandbox Code Playgroud)

如何强制它生成http而不是httpsNginx?

com*_*857 7

假设您正在使用自动site_url检测,Codeigniter自己的http/https检测依赖于实际设置为某个$_SERVER['HTTPS']值的值off,以生成httpbase_url.

检查你的默认fastcgi_params(通常/etc/nginx/fastcgi_params),也许它将它设置为一个空字符串或"off"以外的东西,你也可以从nginx配置强制这个"关闭":

fastcgi_param  HTTPS off;
Run Code Online (Sandbox Code Playgroud)

如果server在nginx的配置文件中使用一个块用于http和https连接,则可以使用映射根据$scheme变量创建所需的值:

# somewhere inside http { ... }
map $scheme $php_https { default off; https on; }
Run Code Online (Sandbox Code Playgroud)

并参考fastcgi_param:

fastcgi_param  HTTPS $php_https;
Run Code Online (Sandbox Code Playgroud)