我如何编写一个 Zend Framework 应用程序来直接处理请求(将 URL 映射到文件)?

How can I write a Zend Framework App that serves requests directly (maps URLs to files)?

背景:我有一个按原样提供文件的旧版应用程序。也就是说,当我转到 http://server/subfolder/my_index.php?value=x 时,它会进入文件系统上的 subfolder 并提供一个名为 my_index.php 的文件并将其传递给 URL 参数和 returns 回复。

我想移动到 ZF3 堆栈,那里的路由不同。我想为 ZF3 上的新模块保留 ZF 路由模型,但也能够按原样使用旧版应用程序,因为重写该应用程序是禁止的。

有办法吗?

不确定是否是这样做的方式,但我在这里查看了中间件层:

我不清楚如何使用它们以及它们是否对我有帮助。

例如,我设置了这个 class,但不确定接下来要做什么。

namespace Application\Middleware;

use Psr\Http\Message\ServerRequestInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Zend\Http\Response;

class IndexMiddleware implements MiddlewareInterface
{

    public function process(ServerRequestInterface $request, DelegateInterface $delegate)
    {
        $response = new \Zend\Diactoros\Response();
        return $response;
    }
}

如果你看看你的 .htaccess 或你的 Nginx 配置,你会在 ZF3 项目中有类似的东西:

RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting or installed the project in a subdirectory,
# the base path will be prepended to allow proper resolution of
# the index.php file; it will work in non-aliased environments
# as well, providing a safe, one-size fits all solution.
RewriteCond %{REQUEST_URI}:: ^(/.+)/(.*)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]

如果您阅读评论,您会发现文件和目录如果存在则按原样提供。