我应该将index.php放在Zend Framework的公共文件夹之外吗?

时间:2013-02-24 02:26:47

标签: zend-framework frameworks

我在共享托管服务器上,我将把zend应用程序放在那里,但是我无法触摸httpd.conf文件来创建一个虚拟主机,因为它是共享主机,他们不允许我这样做。

如果我将index.php文件和.htaccess保存在公共文件夹中,我必须创建一个虚拟主机来隐藏公共网址。

所以,虽然我可以将公共文件夹文件(index.php,.htaccess)放在站点根目录中,因此我不需要为此创建虚拟服务器,并且可以访问我的站点而无需公开在网址中。

如果我把index.php文件从公共文件夹中删除,有什么东西会让我的网站不安全吗?

我说英语不太好,所以很沮丧。我从其他帖子中复制了一些东西来描述我想解释的事情。

我尝试过这种方式但它仍然不起作用,当我输入 localhost / public / zend / 时,它会返回“找不到对象”

目录结构:

zend/
    application/
    library/
    public/
           index.php
           .htaccess
.htaccess

公用文件夹中.htaccess的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

根文件夹中.htaccess的内容:

SetEnv APPLICATION_ENV development

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]

4 个答案:

答案 0 :(得分:0)

那么你在这种情况下无法访问index.php。如果您不能将内容放在Web根目录中,那么最好的办法是将ZF配置为使用public以外的文件夹作为您的doc根目录,这样您的布局可能如下所示:

application/
library/
modules/
public_html/
  index.php
  js/
  css/
  images/

答案 1 :(得分:0)

“public”文件夹是Zend Framework的一个重要关键功能,因为它将Apache限制为只读取该目录中的文件。除了可以通过HTTP访问的公共文件夹之外,您不应该有任何其他内容,并且移动索引文件会引入容易受到攻击的威胁。

请查看this link,这可能会有所帮助。

如果你使用Cpanel this here可能会有用。

答案 2 :(得分:0)

可能有.htaccess和index.php在Apache的htdocs目录中没有任何问题。

没有必要拥有一个名为“public”的文件夹,只是为了将公共部分(公共目录(和应用程序部分(其余项目文件)放在不同的目录中。)应用程序部分不能从用户的浏览器访问(所以把它放在Apache文档根目录之外)

答案 3 :(得分:0)

有许多方法可以让ZF无法将虚拟主机映射到public文件夹。

This answer突出了其中许多内容。

就个人而言,当我遇到共享主机并且无法重新映射时,我倾向于执行以下操作:

  1. 将公用文件夹(index.php,.htaccess,公共资产,如css,js,img等)的内容保存在主机提供的doc root中,并

  2. 将应用程序的其余部分向下推送到_zf这样的文件夹中,我在Deny All文件中添加了.htaccess指令。然后,我修改APPLICATION_PATH中的index.php设置以指向_zf/application

  3. 就是这样。

    完整详情here