0

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

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

有没有办法这样做?

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

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

例如,我设置了这个类,但不知道下一步该做什么。

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;
    }
}
4

1 回答 1

1

如果您查看您.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}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]

如果您阅读评论,您可以看到文件和目录如果存在则按原样提供。

于 2017-06-27T18:41:05.610 回答