在Zend Framework中隐藏URL中的控制器名称

时间:2011-07-09 16:05:03

标签: zend-framework .htaccess url-rewriting

我在Zend上构建的网站存在以下问题:我无法修复: 我正在编辑的网站(不是由我编码)具有以下链接结构:http://www.site.tld/controller/action

但是,我想摆脱链接上的控制器名称,我无法让它工作。例如,当我点击“Link1”时,我想获得http://www.site.tld/Link1

我有以下文件结构

应用

公共
审判
的.htaccess
的index.php

public 文件夹中的.htaccess具有以下内容:

RewriteEngine On RewriteCond%{REQUEST_FILENAME} -s [OR]
RewriteCond%{REQUEST_FILENAME} -l [OR]
RewriteCond%{REQUEST_FILENAME} -d
RewriteRule ^。* $ - [NC,L]
RewriteRule ^。* $ index.php [NC,L]

如果它有用,我还会观察索引控制器中的每个动作都使用

$这 - > _redirect( '/索引/动作');

我尝试重写.htaccess文件,但徒劳无功。它基本上没有指向物理索引控制器。请指教。

谢谢!

2 个答案:

答案 0 :(得分:3)

你在错误的地方寻找。问题不在你的.haccess文件中,而是Zend Framework如何将URL路由到正确的Controller和Action。您的要求是覆盖Zend_Controller_Router的默认路由。就像@Adrian所说,“路由器是你的朋友”。我将为您提供问题的答案,但它附带了一个很大的警告:

以下内容将覆盖您的默认路由,并阻止您访问通过以下网址打开的控制器和模块:example.com/name

将其放在/application/Bootstrap.php文件中:

public function _initCustomRoute()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $route = new Zend_Controller_Router_Route(':action', array(
        'module'     => 'default',
        'controller' => 'index',
        'action'     => 'index'
    ));
    $router->addRoute('default-override', $route);

}

注意:有一些方法可以测试是否可以调度请求并仅在发生故障时路由到此位置,但这是另一个主题。

答案 1 :(得分:2)

路由器是你的朋友,查看Zend_Controller_Router上的文档以及如何在bootstrap中设置它。用几句话来指导这个设置太过分了。

更新 - 添加您的问题
不确定你现在在哪里以及你的设置是如何“默认”的。以下是标准默认设置

中路由器配置的快速概述
URL: /home/user
// translates in a default route setup into
home = controller - HomeController.php
user = action     - HomeController::userAction()
// by default you must have a controller named home and within it an action named user
// however, you can override this default to something like this
home = controller - FloridaController.php
user = action     - FloridaController::miamiAction()
// if you add the colon in your config you will change the placeholder in the url to a variable
:user = action     - FloridaController::miamiAction()
URL: /home/John /home/Mike
// all urls are routed to FloridaController::miamiAction()

您可以通过多种方式设置路线配置。