Zend项目创建如下URL: http://localhost/zftest/public/index/add
我如何拥有像这样的网址 http://localhost/zftest/add.php
感谢。
答案 0 :(得分:2)
首先,你似乎是在摆脱了“公共”部分之后。有两种方法。
首先,.htaccess。在项目的根目录中,创建两个文件:index.php
和.htaccess
,其中包含以下内容:
htaccess的:
RewriteEngine On
RewriteRule .* index.php
的index.php:
<?php
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';
你有它,URL中没有“公开”。
实现它的另一种方法是设置域名。您需要修改两个文件:hosts
和httpd-vhosts.conf
。 hosts文件位于Linux下的/etc/hosts
或Windows下的C:\Windows\System32\drivers\etc\hosts
中。两者都需要根级访问权限。只需添加一行
127.0.0.1 zftest.local
然后找到你的vhosts文件。我正在使用XAMPP,因此以下是XAMPP的路径:Windows下的C:\xampp\apache\conf\extra\httpd-vhosts.conf
/opt/lampp/etc/extra/httpd-vhosts.conf
。只需添加以下内容:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /opt/lampp/htdocs/zftest/public
ServerName zftest.local
ServerAlias zftest.local
SetEnv APPLICATION_ENV development
SetEnv APPLICATION_DOMAIN zftest.local
</VirtualHost>
现在,当你转到zftest.local
(当然选择你想要的任何名字)时,你会看到你的头版,而不是网址中的“公开”部分。
至于问题的其他部分,您需要一个自定义路由器。设置路由器非常简单,您可以在互联网上找到大量信息。有些人喜欢在引导程序中执行此操作,但我认为最简单的方法是在application.ini文件中执行此操作。这是一个示例路由器:
resources.router.routes.getbyroute.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.getbyroute.route = "(.+)\.php"
resources.router.routes.getbyroute.defaults.controller = index
resources.router.routes.getbyroute.defaults.action = index
resources.router.routes.getbyroute.map.1 = action
resources.router.routes.getbyroute.reverse = "%s.php"
这应该照顾你的路线(理论上,我没有测试它的正确性,呵呵)。虽然调查路由器,因为你可能想要比这更通用的东西(这个不会处理除index
之外的其他控制器。)
我希望这会有所帮助。
答案 1 :(得分:1)
我没有看到默认Zend路由的问题,因为这种URL映射样式被认为是一种很好的做法(SEO友好,从URL到模块,控制器和操作的清晰映射),但是如果你想改变路由你应该阅读Zend Controller Router Documentation。然后你的映射可能会看起来像这样:
<?php
$router = $frontController->getRouter();
$router->addRoute(
'add',
new Zend_Controller_Router_Route('add.php', array('controller' => 'index', 'action' => 'add'))
);
?>
答案 2 :(得分:0)
这通常是通过使用虚拟主机文档根目录来实现的,或者更常见的是通过放入.htacess文件来将所有请求重定向到/public/index.php。
有关详细信息,请参阅http://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriter。