首页 文章

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

提问于
浏览
0

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

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

我有以下文件结构

应用程序库公开试验.htaccess index.php

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

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

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

$ this - > _ redirect('/ index / action');

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

谢谢!

2 回答

  • 2

    你在错误的地方寻找 . 问题不在你的 .haccess 文件中,而是's how the Zend Framework routes URL' s到正确的Controller和Action . 您的要求是覆盖 Zend_Controller_Router 的默认路由 . 就像@Adrian所说,"The router is your friend here" . 我将为您提供问题的答案,但它附带一个很大的警告:

    以下内容将覆盖您的默认路由,并阻止您访问通过以下URL打开的控制器和模块: 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);
    
    }
    

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

  • 3

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

    Update - Addition to your question
    不确定你现在的位置以及你的设置是如何的.772117_ . 以下是标准默认设置中路由器配置的快速概述

    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()
    

    您可以通过多种方式设置路由的配置 .

相关问题