未指定输入文件 - apache 和 php-fastcgi

2024-02-09

我客户的网站当前运行在带有 mod_php 的 apache 服务器上。所有应用程序的路由都在 .htaccess 文件中定义(请参阅下面的代码)。现在他正尝试迁移到运行 apache 和 php-fastcgi 的服务器,但路由不再有效。

<IfModule mod_rewrite.c>

  RewriteEngine On

  # Redirect
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} -s [OR]
  RewriteCond %{REQUEST_FILENAME} -l [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule ^.*$ - [NC,L]
  RewriteRule "^noticias/?$" index.php/noticias/frontend/list/ [L,QSA]
  RewriteRule ^.*$ index.php [NC,L]

</IfModule>

当我访问时http://domain.tld/noticias http://domain.tld/noticias, I get No input file specified,并在 apache error_log 中[fcgid:warn] mod_fcgid: stderr: PHP Warning: Unknown: function '1' not found or invalid function name in Unknown on line 0,但是如果我直接访问路线http://domain.tld/index.php/noticias/frontend/list/ http://domain.tld/index.php/noticias/frontend/list/效果很好。

UPDATE

我找到了一个可以改变框架行为的可行解决方案。如果有人有一个解决方案,而无需更改框架(可能在 apache 或 php 配置中),我将很高兴地向答案授予赏金。


正如 @user3584460 所建议的,我决定更改所有路由以将所需的控制器/操作作为查询字符串参数传递。这是如何完成的。

我更改了所有路由以传递 url 参数:

RewriteRule "^noticias/?$" index.php?_url=/noticias/frontend/list/ [L,QSA]

这样我就不会收到错误“未指定输入文件”,但框架(zend)将无法识别该路线,并且始终会显示主页。

路线调度员预计$requestUri变量的格式为index.php/module/controller/action,但随着变化.htaccess, 它是index.php?_url=/module/controller/action。所以我必须做出一些改变Zend_Controller_Request_Http类,所以它会进行转换。

所以我将以下几行添加到setRequestUri method:

public function setRequestUri($requestUri = null)
{
    // ...

    // begin changes
    preg_match('/_url=([a-zA-Z0-9\/\-_\.]+)&?(.*)/', $requestUri, $matches);
    if (count($matches) == 3)
        $requestUri = '/index.php' . $matches[1] . '?' . $matches[2];
    // end changes

    $this->_requestUri = $requestUri;
    return $this;
}

现在效果很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未指定输入文件 - apache 和 php-fastcgi 的相关文章

随机推荐

  • 为什么边距填充在表 td 和 tr 中不起作用?

    table border 0 style padding 10px width 100 tbody tr td style padding 0 img src 8 jpg alt td td style padding 0 img src
  • 增加字符串值

    Java问题在这里 如果我有一个字符串 a 如何向该字符串 添加 值 以便得到 b 等等 就像 a String str abcde System out println getIncrementedString str Output bc
  • 为什么在此正则表达式中 \\ 不被解释为反斜杠?

    我正在学习使用 Java 的模式和匹配器 这是我书中的示例代码片段 正如作者所描述的那样 但我不明白为什么 最终是一个点 而不是反斜杠 部分 和点 部分 编译器不是从左到右读取的吗 import java util regex public
  • 给定 K 个排序列表,每个列表中最多包含 N 个元素,返回所有项目的排序迭代器

    Example List 1 1 4 5 8 9 List 2 3 4 4 6 List 3 0 2 8 Would yield the following result Iterator gt 0 1 2 3 4 4 4 5 6 8 8
  • AltGr 键不起作用,我必须使用 Ctrl+AltGr [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I encountered this problem several times I want to use a character ac
  • 在 C++11 中实现复制和交换习惯用法的更好方法

    我看到很多代码在复制和交换方面实现了五规则 但我认为我们可以使用移动函数来替换交换函数 如下代码所示 include
  • 具有共享依赖项的嵌套ExternalProject_Add

    我正在尝试申请ExternalProject Add自动安装中型 C 项目的依赖项 事情进展顺利 直到我不得不安装一个使用的库ExternalProject Add安装它的依赖项之一 我自己的项目也恰好使用了它 如果我可以避免重建这个库 而
  • bash 多个命令行参数相互依赖

    我有一个脚本 其中接受以下参数 脚本 dph peh 第一个参数告诉脚本我是否需要使用生产脚本或开发脚本来执行它 第二个参数告诉脚本生成的报告的输出是否应作为电子邮件发送或应重定向到 html 页面 当我使用 getopts 时 我得到一个
  • 使用php将上传的excel文件转换为csv

    我正在尝试使用 php 创建一个网页 该网页使用浏览按钮上传 excel 文件并将其导入到 mysql 数据库中 我可以上传 csv 文件并将其导入数据库 html代码
  • 具有 MVC 4 或 5 的 MEF - 可插拔架构 (2014)

    我正在尝试使用 Orchard CMS 等可插入架构构建 MVC4 MVC5 应用程序 所以我有一个 MVC 应用程序 它将作为启动项目并负责身份验证 导航等 然后将有多个模块单独构建为 asp net 类库或剥离的 mvc 项目并具有控制
  • 字符串中包含的方法的调用名称

    如何根据 Groovy 中字符串的值调用方法 例如代替 switch val case one Obj one break case two Obj two break 我想做类似的事情obj val where val包含 one or
  • 如何列出 Android 10 上的所有 pdf 文件?

    由于更改与访问共享存储的授权相关 因此似乎不再可能通过这种方法搜索 pdf 类型的所有文档 使用 requestLegacyExternalStorage false ContentResolver cr context getConten
  • 用 boost 精神解析布尔表达式

    我正在尝试使用 boostspirit 编写布尔表达式的解析器 我在 stackoverflow com 上找到了一个很好的例子 C 中的布尔表达式 语法 解析器 https stackoverflow com questions 8706
  • 如何制作累积序列?

    假设我有一个如下所示的惰性序列 def s iterate inc 1 take 10 s gt 1 2 3 4 5 6 7 8 9 10 现在 我想生成一个累积和的序列s像下面这样 gt 1 3 6 10 15 我怎样才能做到这一点 我尝
  • 如何使用 Promise 递归地读取目录树

    我正在尝试编写一个函数 该函数可以完成与使用带有承诺模式的回调模式编写的以下内容相同的功能 function readdirRecursive path handler callback var errs tree fs readdir p
  • 如何在 Windows 上启用 Docker Remote API

    我正在尝试在 Windows 10 主机上使用 Docker Remote API 我正在使用 Chrome 的 Postman 扩展来查看是否可以从 docker 远程 api 的端点获取结果 以下是我尝试过的端点 GET http 19
  • gridview的锁定滚动

    I have one gridview in my UI but it scrolls vertically I have set all the scrollbar properties as false but its still sc
  • FlatList scrollToIndex 使用 useRef 和 Typescript - 类型错误

    我正在使用 FlatList 我想创建一个引用 以便在按下一个按钮时能够滚动 FlatList 问题是我正在使用 Typescript 并且遇到一种我无法解决的类型错误 问题是 如何为 FlatList 引用创建接口 这里有一个我正在做的事
  • 在 Visual C++ 6.0 中查找源文件的预设位置

    由于我们的一些代码是遗留的 我们仍在使用 Microsoft Visual 6 0 SP6 当我第一次附加到正在运行的进程来调试它时 它不知道我闯入该进程时源文件所在的位置 因此 它要求我在给定源文件名的情况下导航到源树中的适当目录 它记住
  • 未指定输入文件 - apache 和 php-fastcgi

    我客户的网站当前运行在带有 mod php 的 apache 服务器上 所有应用程序的路由都在 htaccess 文件中定义 请参阅下面的代码 现在他正尝试迁移到运行 apache 和 php fastcgi 的服务器 但路由不再有效