代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

如何解决用户浏览index.php时的问题

  •  3
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    在Zend框架中,如果用户明确地使用MVC http://base/url/index.php 而不仅仅是 http://base/url ,系统认为真正的基URL是 http://base/url/index.php/ 根据这个计算出系统中的所有URL。

    所以,如果我有一个控制器XXX和操作YYY,链接将是
    http://base/url/index.php/XXX/YYY 这当然是错误的。

    我现在通过在index.php添加一行来解决这个问题:

    $_SERVER["REQUEST_URI"]=str_replace('index.php','',$_SERVER["REQUEST_URI"]);
    

    我想知道ZF是否有内置的方法来解决这个问题。

    6 回复  |  直到 12 年前
        1
  •  5
  •   karim79    15 年前

    你可以使用ZF Zend_Controller_Router_Route_Static (呸!)例如:

    阅读上面链接的手册页,可以找到一些很好的例子。

    $route = new Zend_Controller_Router_Route_Static(
        'index.php',
        array('controller' => 'index', 'action' => 'index')
    );
    $router->addRoute('index', $route);
    

    不能说我完全不同意你的做法。也就是说,其他人可能会指出5000个左右的缺点。祝你好运。

        2
  •  2
  •   Community Erin Dees    7 年前

    这真的取决于你想如何解决这个问题。如您所知,Zend框架构建在前控制器模式上,其中每个没有显式引用/public目录中文件的请求都被重定向到 索引文件 . 所以你可以用很多方法来解决这个问题:

    1. 编辑.htaccess文件(或服务器配置指令)以将请求重写为所需请求:
      • rewriterule(.*index.php)/错误/禁止?req=$1//重写到错误控制器的禁止操作。
      • rewriterule index.php/index//将请求重写到主控制器并执行操作
    2. 按照建议在引导程序中添加静态路由 karim79 .
        3
  •  2
  •   Rob Allen    15 年前

    使用mod ou rewrite。像这样的事情应该可以做到:

    RewriteRule ^index.php/(.*)$ /$1 [r=301,L]
    
        4
  •  0
  •   Boris Guéry    15 年前

    我认为你不应该用一条路线来做这件事。

    这是一个普通的问题,不应该用这种方法来解决。

    你最好在.htaccess中完成它,这将为你提供一种更好更简单的方法,将用户重定向到你想要的地方,比如错误页面或索引。

    这是 mod_rewrite

        5
  •  0
  •   farzad    15 年前

    我从未使用Zend框架面对过这个问题。只是不要链接到index.php文件。就是这样。当您将应用程序的地址提供给用户时,只需告诉他们转到 http://base/url/

    当用户进入 http://base/url/ 她的请求URI是 基础/网址 您的.htaccess文件将请求路由到index.php,但是请求 基础/网址 . 您不需要从请求中删除“index.php”。因为它不在那里。

    当您尝试为链接和表单生成URL以及…,请使用内置的url()视图帮助器来生成链接。这样地:

    // in some view script
    <a href="<?php
      echo $this->url( array('controller'=>'targetController','action'=>'targetAction') );
             ?>" >click</a>
    

    不要担心链接。Zend将为您生成一个URL。

        6
  •  0
  •   noginn    15 年前

    我看待这个问题的方式是,如果我有一个由php支持的网站,并且有一个用户访问 http://site/index.aspx 然后我会发送404。

    尽管index.php理论上确实存在,但它在我的应用程序中不是有效的URL,所以在本例中我也会发送404。