在Zend框架中,使用MVC,如果A用户明确地浏览到http://base/url/index.php而不是http://base/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中是否有内置方法来解决这个问题。
答案 0 :(得分:5)
您可以使用Zend_Controller_Router_Route_Static
(p!)来使用ZF执行此操作,例如:
阅读上面链接的手册页,有一些很好的例子可以找到。
$route = new Zend_Controller_Router_Route_Static(
'index.php',
array('controller' => 'index', 'action' => 'index')
);
$router->addRoute('index', $route);
不能说我完全不同意你的做法。也就是说,其他人可能会指出5000左右的缺点。祝你好运。
答案 1 :(得分:2)
那真的取决于你想要解决这个问题。如您所知,Zend Frameworks构建在前端控制器模式上,其中每个未明确引用/ public目录中文件的请求都被重定向到 index.php 。所以你基本上可以通过多种方式解决这个问题:
答案 2 :(得分:2)
使用mod_rewrite。这样的事情应该这样做:
RewriteRule ^index.php/(.*)$ /$1 [r=301,L]
答案 3 :(得分:0)
我认为你不应该使用路线来做这件事。
这是一种通用问题,不应该通过这种方式解决。
你最好在你的.htaccess中做这件事,这将为你提供更好的和更好的选择。更简单的方法将用户重定向到您想要的位置,例如错误页面或索引。
以下是mod_rewrite
的文档页面答案 4 :(得分:0)
我从未使用Zend Framework遇到过这个问题。只是不要链接到index.php文件。而已。当您向用户提供申请时,请告诉他们转到http://base/url/
当用户输入http://base/url/时,她的请求URI为 base / url ,而您的.htaccess文件会将请求路由到index.php,但请求 IS 基/ URL 。您不需要从请求中删除'index.php'。因为它不存在。
当您尝试为链接和表单生成URL和...时,请使用内置的url()视图助手来生成链接。像这样:
// in some view script
<a href="<?php
echo $this->url( array('controller'=>'targetController','action'=>'targetAction') );
?>" >click</a>
不要担心链接。 Zend将为您生成一个URL。
答案 5 :(得分:0)
我看待这个的方式是,如果我有一个由PHP驱动的网站,并且用户转到http://site/index.aspx,那么我会发送一个404.
尽管index.php在理论上确实存在,但它在我的应用程序中不是有效的URL,所以我也会在这种情况下发送404.