如何将操作重定向为Zend中的“模拟”控制器?

时间:2012-06-01 17:15:17

标签: .htaccess url-rewriting zend-framework2

我正在开发一个IndexController包含“about”,“contact”等页面的网站。我想要Zend或.htacess配置重定向/关于/ index / about,但是没有URL重写(或者至少是对用户透明)。

所以它的表现如下:

mysite.com/about => mysite / index / about(没有向用户显示所述URI)。

3 个答案:

答案 0 :(得分:2)

使用新的Service Manager配置:

'controller' => array(
    'classes' => array(
        'index_controller' => 'MyModule\Controller\IndexController',
    ),
),

'router' => array(
'routes' => array(

    'activities_list' => array(
        'type'    => 'Literal',
            'options' => array(
            'route' => '/about', <- The requested URL
            'defaults' => array(
                'controller' => 'index_controller', <- What will process the request
                'action'     => 'about',
            ),
        ),
    ),

), // End of routes
), // End of router

答案 1 :(得分:1)

你不需要做任何特别的事情,ZF2可以完美地处理自定义路线。 ZF2 tutorial by Akrabat表明一切都很好。你最终会在你的配置中做这样的事情:

'Zend\Mvc\Router\RouteStack' => array(
    'parameters' => array(
        'routes' => array(
            'default' => array(
                'type'    => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'    => '/[:controller[/:action]]',
                    'constraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        'controller' => 'Application\Controller\IndexController',
                        'action'     => 'index',
                    ),
                ),
            ),
            'about' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Application\Controller\IndexController',
                        'action'     => 'about',
                    ),
                ),
            ),
        )
    )
)

当然,你也可以通过扩展ActionController或编写一个Controller插件来自动化这些东西。

答案 2 :(得分:-1)

尝试将其添加到文档根目录中的.htaccess文件中:

RewriteEngine On
RewriteRule ^about(.*)$ /index/about$1 [L]