我正用这个敲打墙......
我需要在子目录中建立一个zend框架应用程序。
即。域名是tricell.ss,我想使用tricell.ss / tricell作为应用程序主目录。
已经完成了:
我在我的配置(application.ini)中设置了:
resources.frontController.baseUrl = "/tricell"
我在配置中创建了另一个var
baseUrl = "/tricell"
在我的Boostrap中我得到了这个:
$router = new Zend_Controller_Router_Rewrite();
$frontController->setRouter($router);
$frontController->setBaseUrl($this->config->baseUrl);
$frontController->dispatch();
在我的布局中,我试图使用以下方式显示图像:
$this->baseUrl('/img/btn.png')
以下是我的虚拟主机配置:
<VirtualHost *:80>
DocumentRoot "/HTDOCS/tricell/tricell/public_html"
ServerName tricell.ss
RewriteRule ^$ [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?tricell.ss$
RewriteRule ^(/)?$ tricell [L]
</VirtualHost>
这是我的.htaccess:
SetEnv APPLICATION_ENV开发
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
问题是当我试图显示图像时没有任何反应。当我试图通过URL获取图像时:
http://tricell.ss//tricell/img/btn.png
我收到有关错误控制器的信息。我怎么能做到这一点?我可以(没有任何问题)为tricell.ss进行根域配置,然后获取图像,即tricell / ss / img / btn.png,但我想在子目录上工作,我不能用图像来做。我在这里做错了什么?
答案 0 :(得分:1)
我认为最简单的方法就是:
从一个全新的ZF项目开始,或删除你创建的.htaccess或httpd.conf / httpd-vhosts.conf中的所有zend路由和任何特殊配置。
删除您在配置文件中设置的baseUrl选项。
将index.php文件和.htaccess文件放在/HTDOCS/tricell/tricell/public_html/tricell
文件夹中。
将项目的其余部分(控制器,模型,配置等)放在Web根目录之外。在此示例中,我将假设它们位于/HTDOCS/tricell/tricell/zfproject
。
编辑index.php并更改:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// to:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../zfproject/application'));
现在您的应用程序将以基本目录yoursite.com/tricell
运行IndexController.php的URL将是http://yoursite.com/tricell/index
您不需要做任何特别的事情来告诉Zend您的基本网址是“tricell”。只需确保在您的视图脚本中使用$this->baseUrl()
作为路径,这样您就不必担心手动将/ tricell添加到所有内容的开头,如果您将项目移动到另一个目录/路径,则不需要需要改变以应对新的道路。
答案 1 :(得分:1)
我只是设法解决了我的问题...这很简单,但我对所有这些重写规则感到非常困惑。
总而言之,tricell令人困惑,让我们也做一些改变。 所以要达到像tricell.ss / sub这样的东西我需要:
在我的/ HTDOCS / tricell / tricell / sub目录中插入另一个.htaccess:
RewriteEngine On
RewriteRule ^ .htaccess $ - [F]
RewriteCond%{REQUEST_URI} =“” RewriteRule ^。* $ /sub/ublic_html/index.php [NC,L]
RewriteCond%{REQUEST_URI}!^ / sub / public_html /。 $ RewriteRule ^(。)$ / sub / public_html / $ 1
RewriteCond%{REQUEST_FILENAME} -f RewriteRule ^。* $ - [NC,L]
RewriteRule ^ public_html /.*$ /sub/public_html/index.php [NC,L]
这解决了我的所有问题。
答案 2 :(得分:0)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} "/tour/"
RewriteRule (.*) /tour/index.php [L,END]
</IfModule>
上面的代码在根文件夹domain.com/.htaccess中对我有用。我将它直接放在htaccess中的“#BEGIN WordPress”部分之前。
如果Request_URI匹配/ tour /
,最后的诀窍是让RewriteRule指向Zend的index.php。