我是Zend Framework的新手。我想知道如何在共享主机上实现zend框架。因为zend框架文件夹结构 所有视图文件都放在“public”文件夹中。
假设
“/”是我的主要根文件夹,而public就像 “/ public”
以便网址变为“http://site/public/ ... .bla bla ...”
这是正确的吗?
还是有其他方法吗?
我没有任何创建虚拟主机的权限。
那该怎么办?
我希望你理解我的问题。如果没有,请问我。
谢谢!
答案 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
)
在'src'目录中创建一个.htaccess文件,并添加Deny from All指令。
在索引文件中,通过执行以下操作将工作目录更改为src
文件夹:
define('SRC_ROOT', 'src');
chdir(SRC_ROOT);
......你很高兴去!
答案 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(在我的情况下))