【问题标题】:CodeIgniter causes server to drop connection when redirecting to routed URLsCodeIgniter 导致服务器在重定向到路由 URL 时断开连接
【发布时间】:2011-10-13 13:30:56
【问题描述】:

我有一个 CodeIgniter 站点在本地运行良好,但现在我已将它上传到另一台服务器,它在非常特定的条件下中断。

如果我尝试重定向到在 routes.php 中有路由的 URL,服务器将断开连接

$route['controller/dothis(:any)?'] = "controller/method/dothis$1";
$route['controller/dothat(:any)?'] = "controller/method/dothat$1";

服务器正在运行 Apache,任何日志中都没有错误,服务器只是断开连接,并且没有向客户端返回任何内容。

事件的顺序是这样的:

  1. 页面加载正常
  2. 用户通过 POST 提交表单
  3. 控制器收到 POST 请求
  4. 控制器调用redirect() 到/controller/dothis/xxx
  5. 服务器断开连接

我被这个问题难住了,以前从未见过这种行为。

更新:

日志是这样结束的:

访问日志

2.217.174.75 - - [13/Oct/2011:18:29:04 +0100] "GET /home/index/ HTTP/1.1" 200 7209
2.217.174.75 - - [13/Oct/2011:18:31:18 +0100] "POST /home/index/ HTTP/1.1" 302 68

重写日志

2.217.174.75 - - [13/Oct/2011:18:31:18 +0100] [89.234.23.46/sid#2b5effefb0f0][rid#2b5ef2745340/initial/redir#1] (3) [perdir /var/www/staging/html/] applying pattern '^(.*)$' to uri 'index.php'
2.217.174.75 - - [13/Oct/2011:18:31:18 +0100] [89.234.23.46/sid#2b5effefb0f0][rid#2b5ef2745340/initial/redir#1] (1) [perdir /var/www/staging/html/] pass through /var/www/staging/html/index.php

PHP 或 Apache 错误日志中没有条目。

如您所见,表单已提交,尝试重定向(状态 302),然后浏览器端的连接就消失了。

系统日志中没有 Apache 崩溃的条目。

【问题讨论】:

    标签: codeigniter redirect routes


    【解决方案1】:

    这是死亡的白页吗?还是浏览器无法连接?萤火虫有任何信息吗?特别是网络窗格?确定重定向到的页面上没有错误?试着在上面写一些文字?

    您的 .htaccess 设置是否正确?主机上的 apache 模块有限制吗?

    code igniter routing


    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine on
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php/$1 [QSA,L]
    </IfModule>
    

    【讨论】:

    • 这不是死亡的白页。连接刚刚断开。没有额外的调试信息,我什至没有得到状态值,连接就消失了。 Apache 日志中也没有任何信息。完全相同的代码在我的本地服务器上运行良好,所以我很确定这是一个服务器配置问题,但我不知道它可能是什么。我已经要求托管公司启用 PHP 错误日志记录,以便我可以在那里查看。
    • "主机上的apache模块有限制吗?"你到底是什么意思?另外,htaccess 文件也没问题。
    • 重新 apache 模块:mod_rewrite 由 .htaccess 使用。断开连接时会发生什么?浏览器有什么作用?不应该有零反馈;未找到或 500 错误,或 DNS 错误,或应显示的内容。你用萤火虫吗?如果是这样,在网络选项卡下,它应该显示对路由页面的请求(GET 或 POST);显示标题和响应。尝试摆脱所有页面上的所有代码,并在页面上回显一些文本以消除变量。
    • 有零反馈,这就是问题的重点,我没有得到服务器的响应,没有状态码,没有标题,没有内容,在页面之前断开连接已加载。
    • 该死的太糟糕了。你有CI调试吗?你的日志在配置中设置?如果不是,请尝试在config.php 中打开$config['log_threshold'] = 4;,并确保$config['log_path'] = '/site/logs/'; 正确且可写。看看那里是否有任何显示。
    【解决方案2】:

    它与 CodeIgniter 完全无关。

    我在会话中存储了太多数据(使用原生 PHP 会话),而 Apache 正在丢弃响应。

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2016-03-23
      • 2011-07-16
      相关资源
      最近更新 更多