我想在不关闭原始设计的情况下测试我的项目的新设计。我将整个源目录复制到新目录。我准备了如下子域和目录名称(这是共享主机):
<pre>
http://project.mydomain.com/
/public/user1/project/
http://project1.mydomain.com
/public/user1/project1/
</pre>
我在本地主机(Windows、Apache2.4、php 5.6)上所做的相同。刚刚将“1”添加到新目录名称并复制源目录的所有内容。在本地主机上,两个“站点”都可以解决任何问题。
但是在我尝试使用重定向控制插件之前,在共享主机上重复的站点工作正常。结果我只看到空白页。它发生在我所有的 14 个模块和我使用的任何路线中。
一个示例调用:
<pre>
public function fakeAction()
{
if ( $this->getRequest()->isPost() )
{
return $this->redirect()->toRoute('main');
}
return $this->redirect()->toRoute('login');
}
</pre>
,其中路由'main'配置为:
<pre>
return [
'router' => [
'routes' => [
'main' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\MainController::class,
'action' => 'index'
]
]
],
</pre>
其他几个事实:
- 我没有使用事件(如 MvcEvent::EVENT_DISPATCH 或任何其他事件)
我在 Application 模块中只有一个 onBootsrtap() 方法(其他 13 个模块只不过是 Module.php 中的 getConfig() ):
公共函数 onBootstrap ( MvcEvent $event ) { $application = $event->getApplication(); $serviceManager = $application->getServiceManager(); $sessionManager = $serviceManager->get(SessionManager::class); $sessionManager->start(); }
$this->redirect()->toRoute('main') 返回(恕我直言)正确的对象:
Zend\Http\PhpEnvironment\Response 对象 ( [版本:受保护] => [内容发送:受保护] => [recommendedReasonPhrases:protected] => 数组 ( [100] => 继续 [101] => 切换协议 [102] => 处理 [200] => 好的 [201] => 已创建 [202] => 接受 [203] => 非权威信息 [204] => 没有内容 [205] => 重置内容 [206] => 部分内容 [207] => 多状态 [208] => 已报告 [226] => 已使用即时消息 [300] => 多项选择 [301] => 永久移动 [302] => 找到 [303] => 查看其他 [304] => 未修改 [305] => 使用代理 [306] => 切换代理 [307] => 临时重定向 [308] => 永久重定向 [400] => 错误请求 [401] => 未经授权 [402] => 需要付款 [403] => 禁止 [404] => 未找到 [405] => 方法不允许 [406] => 不可接受 [407] => 需要代理身份验证 [408] => 请求超时 [409] => 冲突 [410] => 走了 [411] => 需要长度 [412] => 前提条件失败 [413] => 请求实体太大 [414] => 请求 URI 太长 [415] => 不支持的媒体类型 [416] => 请求的范围不可满足 [417] => 预期失败 [418] => 我是一个茶壶 [422] => 无法处理的实体 [423] => 锁定 [424] => 依赖失败 [425] => 无序集合 [426] => 需要升级 [428] => 需要先决条件 [429] => 请求过多 [431] => 请求标头字段太大 [444] => 连接关闭而没有响应 [451] => 因法律原因不可用 [499] => 客户端关闭请求 [500] => 内部服务器错误 [501] => 未实施 [502] => 网关错误 [503] => 服务不可用 [504] => 网关超时 [505] => 不支持 HTTP 版本 [506] => 变体也协商 [507] => 存储空间不足 [508] => 检测到环路 [510] => 未扩展 [511] => 需要网络身份验证 [599] => 网络连接超时错误 ) [状态代码:受保护] => 302 [原因短语:受保护] => [headers:protected] => Zend\Http\Headers 对象 ( [pluginClassLoader:protected] => [headersKeys:protected] => 数组 ( [0] => 位置 )
[headers:protected] => Array ( [0] => Array ( [name] => Location [line] => Location: / ) ) ) [metadata:protected] => Array ( ) [content:protected] => )
浏览器中的地址还是一样的。
- 浏览器开发工具显示浏览器没有重定向到任何地方(网络选项卡上没有新条目),
- 浏览器没有收到新的传入数据。
- 提供者共享的 Apache error.log 没有任何条目
Apache access.log 显示
2018 年 3 月 5 日:13:43:51 +0100 xxx.xx.xx.xxx 获取 /favicon.ico HTTP/1.0 状态:200 318 B
05/Mar/2018:13:43:49 +0100 xxx.xx.xx.xxx POST /open HTTP/1.0 Status: 200 23 B
也许这是线索:可以吗,该服务器在 POST 之后发送 /favicon.ico 吗?但为什么?我作为fakeAction() Zend\Http\PhpEnvironment\Response 对象而不是 ViewModel 的结果返回。
我正在捕获所有异常、错误和严格通知,但在这种情况下 - Apache/php/framework 不会触发其中任何一个。
最后一次测试:如果在复制过程中某些文件被损坏,我只是将工作版本的目录从“项目”重命名为“项目1”,效果是一样的——重定向不起作用。
更新 1
- 我删除了供应商目录并通过作曲家再次获取它。
- 缓存清晰(我没有使用缓存,zend 框架一直处于开发阶段)
最终更新!
我发现发生了什么。正如我在我的一个答案中所写,我composer
通过 Zend Studio 界面使用。今天打开 Zend Studio 控制台,仔细查看了控制台日志。每次我使用命令更新/安装依赖 composer
项时都使用自己的缓存(不是在线存储库),它复制了模块 zend-developer-tool 但(出于未知原因)模块的一个文件在本地硬盘的作曲家缓存中损坏。在我删除作曲家缓存并再次运行更新/安装依赖项后,所有工作都应如此。谢谢大家的努力。