关于共享主机的Zend Framework

时间:2009-07-12 08:14:41

标签: zend-framework shared-hosting directory-structure

我是Zend Framework的新手。我想知道如何在共享主机上实现zend框架。因为zend框架文件夹结构 所有视图文件都放在“public”文件夹中。

假设

“/”是我的主要根文件夹,而public就像 “/ public”

以便网址变为“http://site/public/ ... .bla bla ...”

这是正确的吗?

还是有其他方法吗?

我没有任何创建虚拟主机的权限。

那该怎么办?

我希望你理解我的问题。如果没有,请问我。

谢谢!

12 个答案:

答案 0 :(得分:12)

我认为最好的方法是从公共目录(Zend Framework目录结构)中删除.htaccess,并将以下内容放入“root”目录中:

 
RewriteEngine On

RewriteRule ^.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.$ RewriteRule ^(.)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

答案 1 :(得分:11)

在您的基本路径(即/../ public)下包含此.htacces文件:

RewriteEngine On

# Exclude some directories from URI rewriting
#RewriteRule ^(dir1|dir2|dir3) - [L]

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

然后留下publc目录下的.htaccess。

所以你将有2个.htaccess文件,一个在公共目录下(普通的Zend Framework文档),第二个在你的基本路径下(我上面发布的那个)。

答案 2 :(得分:2)

您应该将项目的公共文件夹放在主机的www文件夹中,这样您的地址就会变成yourdomain.com/。 您的源代码文件夹(如库,应用程序......)应与www文件夹放在同一级别,而不是在其中。此方法将提升您网站的安全性

答案 3 :(得分:1)

事实上,在共享主机上运行Zend Framework应用程序并不是最好的理想选择。我真的建议获得虚拟私人托管(VPS)。 Zend Framework和其他框架已经安装并定期更新,有非常好的和廉价的托管。我在servergrove,到目前为止一直很棒!

但这并不意味着你无法让它在共享主机上运行。你只需要与.htacess合作。将公用文件夹的内容放入webroot并调整bootstrap.php中的路径,确保无法直接访问所有其他文件夹,并使用通常的ZF方法通过index.php路由所有内容。

答案 4 :(得分:1)

ArneRie的回答对我不起作用,最后我最终使用了Lorenzo Albertons solution。希望这有助于其他人获得更快的解决方案。

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

答案 5 :(得分:1)

实际上我已经搜索了它并找到了很多答案(其中大部分是在SO上),但它们都没有为我工作。所以我终于找到了一个解决方案 - 根目录上的.htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php

来自http://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriter的这个 和root目录上的index.php:

<?php 
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';
?>

来自http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/的这个 即使在根文件夹中有其他项目目录,它也适用于我 - 比如论坛等。 认为它可能对某人有用:)

答案 6 :(得分:1)

另外Rob Allen wrote a good solution

我正在使用 Zend Framework 2 ,它对我有用。 Alghough我没有从上面的链接中完成“引用面向公众的文件”

我刚从 layout.phtml 更改了代码:

$basePath = $this->basePath();

为:

$basePath = $this->basePath();
if (defined('RUNNING_FROM_ROOT')) {
    $basePath .= 'public/';
}

答案 7 :(得分:0)

我一直处于相同的情况,并将zend库放在公共文件夹下,如'src' - 并使用全部的.htaccess Deny。你必须要处理几条路径,但它运作正常。

答案 8 :(得分:0)

。 。 。 Magento如何使用Zend框架???我正在使用XAMPP,我确实在本地安装了Magento而没有修改php.ini,http.conf和虚拟主机。

答案 9 :(得分:0)

我最近遇到了这个问题,通过这个帖子,我找到了一个解决方案。我使用的是zf2。所以我所要做的就是将zend相关文件放在一个名为src的目录中。该目录将驻留在公共或根目录(例如/www

  1. 在'src'目录中创建一个.htaccess文件,并添加Deny from All指令。

  2. 在索引文件中,通过执行以下操作将工作目录更改为src文件夹:

    define('SRC_ROOT', 'src');
    chdir(SRC_ROOT);
    
  3. ......你很高兴去!

答案 10 :(得分:0)

设置虚拟主机通常在httpd.conf或extra / httpd-vhosts.conf中完成。如果您使用的是httpd-vhosts.conf,请确保主httpd.conf文件中包含此文件。一些Linux发行版(例如:Ubuntu)打包Apache,以便配置文件存储在/ etc / apache2中,并在文件夹/ etc / apache2 / sites-enabled中为每个虚拟主机创建一个文件。在这种情况下,您可以将下面的虚拟主机块放入文件/ etc / apache2 / sites-enabled / zf2-tutorial。

确保NameVirtualHost已定义并设置为“*:80”或类似,然后沿这些行定义虚拟主机:

Setting up the virtual host is usually done within httpd.conf or extra/httpd-vhosts.conf. If you are using httpd-vhosts.conf, ensure that this file is included by your main httpd.conf file. Some Linux distributions (ex: Ubuntu) package Apache so that configuration files are stored in /etc/apache2 and create one file per virtual host inside folder /etc/apache2/sites-enabled. In this case, you would place the virtual host block below into the file /etc/apache2/sites-enabled/zf2-tutorial.

Ensure that NameVirtualHost is defined and set to “*:80” or similar, and then define a virtual host along these lines:

 <VirtualHost *:80>
     ServerName zf2-tutorial.localhost
     DocumentRoot /path/to/zf2-tutorial/public
     SetEnv APPLICATION_ENV "development"
     <Directory /path/to/zf2-tutorial/public>
         DirectoryIndex index.php
         AllowOverride All
         Order allow,deny
         Allow from all
     </Directory>
 </VirtualHost>

Make sure that you update your /etc/hosts or c:\windows\system32\drivers\etc\hosts file so that zf2-tutorial.localhost is mapped to 127.0.0.1.

确保更新/ etc / hosts或c:\ windows \ system32 \ drivers \ etc \ hosts文件,以便zf2-tutorial.localhost映射到127.0.0.1。

答案 11 :(得分:-1)

我建议最简单:以index.php在你的root中的方式开发你的应用程序(甚至更好 - 始终在index.php中定义PUBLIC_PATH - dirname(__FILE__);并创建相对于此常量的链接)。随应用程序和库文件夹。您可以使用.htaccess中的deny from all轻松地从外部无法访问它们。

当您的公众不公开时,PUBLIC_PATH常量也会有所帮助。 (公共html或/ public html / www(在我的情况下))