Zend Framework - 没有公共文件夹

时间:2010-03-22 21:15:34

标签: apache zend-framework

我要在共享主机上托管应用程序,在那里我无法创建虚拟主机或在apache上更改内容。

通常使用ZF的应用程序看起来像这样:

    • 公共
      • 的index.php
      • 的.htaccess
    • 应用
    • 文库
我有......那样:

    • 应用
  • 的index.php
  • 的.htaccess

我的所有代码都在应用程序文件夹中。 但是也有一些带有敏感信息的.ini和.xml文件,例如登录名和密码等......

如果在deny from all的应用程序文件夹中添加.htaccess,文件夹中的信息是否安全?

4 个答案:

答案 0 :(得分:8)

我最近在http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/写了这篇文章。

基础知识是:

在根文件夹中创建index.php:

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

在根文件夹中创建.htaccess文件:

SetEnv APPLICATION_ENV production

RewriteEngine On
RewriteRule .* index.php 

也许在测试时将APPLICATION_ENV设置为开发:)

请注意,在引用静态文件时,baseUrl()视图助手现在指向根文件夹而不是公共/文件夹。

答案 1 :(得分:2)

您可以在共享主机上保留常用的目录结构。只需使用.htaccess更改文档根目录即可。我在处理共享主机时这样做:

RewriteEngine On

php_value upload_max_filesize 15M
php_value post_max_size 15M
php_value max_execution_time 200
php_value max_input_time 200
# 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]

答案 2 :(得分:1)

  

如果我在应用程序文件夹中添加一个.htaccess,并且所有内容都是deny,那么该文件夹中的信息是否安全?

这不是一个理想的解决方案,因为如果提供商改变了.htaccess文件的解析方式(他们在生产机器上永远不会这样做,那么如果发生这种情况就不会发生意外),但我想这是如果没有非公共目录,你可以得到最好的。

如果可以(我不知道ZF是否支持),请将xmlini文件重命名为.php。这样,即使删除了保护,它们也会被解析为PHP文件,而不是被提供给公众。这有点偏执,但如果它没有太多麻烦可行,不是一个坏主意。

答案 3 :(得分:0)

您是否只能访问虚拟主机上的公共目录?通常主机允许您访问至少一个上面的目录,在这种情况下,更好的解决方案是在其中放置应用程序的文件夹。然后,您可以将公共vhost目录符号链接到应用程序的公共目录中。如果不这样做,您至少可以将配置文件保存在vhost的公共目录之外,因为您可以轻松告诉ZF它们的位置。

如果你绝对不能做这些事情,那么你将不得不使用像你建议的那样的文件结构。假设敏感的ini / XML文件用于Zend_Config,该组件还支持PHP数组进行配置(参见http://framework.zend.com/manual/en/zend.config.introduction.html处的示例#1)。对于您来说,这将是一个稍微更安全的选项,因为您的htaccess文件无法正常工作,只要PHP文件仍被解析为PHP,您的敏感数据将无法查看。