问候。基本上,我正在尝试从文件夹中运行Zend Framework应用程序(实际上是多个) - 但是没有指定公共目录。我知道这听起来很脏,但我有我的理由,所以这超出了我的问题范围。
例如,这可能是我的ZF“安装”之一:
http://www.myurl.com/project1/
(其他人可能在/ project2 /等)
我正在使用标准的ZF目录结构。我也熟悉在项目文件夹中放置.htaccess以将流量重定向到/ public /的常用于Zend Framework共享托管环境的各种方法 - 问题是当你的项目根不是基本URL,它似乎不起作用。
具体来说,如果我将以下.htaccess文件放在/ project1 /
中RewriteEngine On RewriteRule ^(。*)$ public / $ 0 [L]
我收到一个ZF错误页面说明:
指定的控制器无效(project1)
所以似乎认为文件夹名称是控制器。
如果我使用这里解释的更长的解决方案,我会遇到同样的问题: http://www.alberton.info/zend_framework_mod_rewrite_shared_hosting.html
(显然,我用包含“my”路径的路径替换路径,即。/ project1 /)
非常感谢任何帮助!
答案 0 :(得分:1)
好的,我之前的回答是愚蠢的。尝试不同的方法。
对this post的评论指出了此问题,但可以通过在应用的前端控制器上设置baseUrl
来处理。
我会在application/configs/application.ini
(可能是每个环境)中添加一个条目,然后在Bootstrap
中设置它。这应该允许路由忽略/project1/
前缀并关注其余的URL。
<强>更新强>
我会设置一个像application.ini
这样的键,类似于:
[production]
settings.baseUrl = "/project1"
如果每个环境有所不同,那么您可以为每个环境添加一个条目:
[development:production]
settings.baseUrl = "/some/local/url/prefix/project1"
然后在application/Bootstrap.php
中添加如下方法:
protected function _initBaseUrl()
{
$options = $this->getOptions();
$baseUrl = isset($options['settings']['baseUrl'])
? $options['settings']['baseUrl']
: null; // null tells front controller to use autodiscovery, the default
$this->bootstrap('frontcontroller');
$front = $this->getResource('frontcontroller');
$front->setBaseUrl($baseUrl);
}
应该这样做。
答案 1 :(得分:0)
根据David的回答,如果您不需要在/ public中重写资源,请执行以下操作
假设您在url domain.com/yourapplication上有一个项目
像这样创建/.htaccess
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
在/application/configs/application.ini中添加
settings.baseUrl = "/yourapplication"
在/application/Bootstrap.php中添加
protected function _initBaseUrl()
{
$options = $this->getOptions();
$baseUrl = isset($options['settings']['baseUrl'])
? $options['settings']['baseUrl']
: null; // null tells front controller to use autodiscovery, the default
$this->bootstrap('frontcontroller');
$front = $this->getResource('frontcontroller');
$front->setBaseUrl($baseUrl);
}
现在,当您在浏览器中访问domain.com/yourapplication时,htaccess会将所有无效文件请求重定向到domain.com/yourapplication/public,并将前端控制器设置为您的应用程序。