2012-11-07 31 views
2

我有一個帶登錄表單的Codeigniter應用程序。我在Apache和Nginx上運行它。在Apache上,一切正常,表單操作正常。但在Nginx上,表單動作使用https而不是http(我現在不想)。Nginx上的Codeigniter爲表單生成https操作,但不生成Apache

我生成使用這種形式:

<?php echo form_open(site_url('/user/do_login')); ?> 

和它產生這樣的:

<form action="https://example.com/index.php/user/do_login" method="post" accept-charset="utf-8"> 

我怎樣才能迫使它產生http,而不是https對Nginx的?

回答

7

假設您使用的是自動site_url檢測,Codeigniter自己的http/https檢測依賴於$_SERVER['HTTPS'] value to be off,如果它實際上設置爲某種內容,則會爲base_url生成http

檢查您的默認fastcgi_params(通常/etc/nginx/fastcgi_params),可能將其設置爲空字符串或不是「關」以外的東西,你也可以從nginx的配置迫使這本是「關」:

fastcgi_param HTTPS off; 

如果您正在使用一個server塊nginx的的配置文件裏面HTTP和HTTPS連接,你可以使用一個mapping來創建基於$scheme變量所需的值:

# somewhere inside http { ... } 
map $scheme $php_https { default off; https on; } 

和參考它在fastcgi_param

fastcgi_param HTTPS $php_https; 
+0

我強制它從nginx配置變成'off',現在就解決了!謝啦。 –

+0

太棒了,它的工作。 –

1

檢查Nginx的盒子VS Apache的框中輸入您的config.php。 site_url返回你在config.php的$ config ['base_url']條目中指定的內容

+0

你也是對的,但是如果CodeIgniter嘗試自動檢測到base_url –