htaccess更改webroot并保护文件

时间:2011-02-11 15:34:58

标签: apache .htaccess mod-rewrite symfony1

我始终确保我的应用程序代码,配置文件,日志等存储在webroot的外部。这只是常识。所以,我的项目结构看起来像......

/app/
/config/
/web/

我的客户已经和godaddy一起了,所以我愚蠢地向他们注册了一个基本的linux托管包,然后才意识到他们不允许你访问webroot上面的一个级别或者将你的webroot更改为低一级。

他们的技术支持人员告诉我在那里制作一个新文件夹并称之为“web”并对其进行“HTML重定向”。啊。那么显而易见的问题是有人可以浏览到mydomain.com/config/database.yml

所以,我非常接近移动主机,但我想知道是否有人知道我可以透明地将所有请求重定向到mydomain.com到mydomain.com/web的方式(htaccess)。然后,确保在/ app /,/ config /等中没有文件可以访问...

在/ web /目录中我需要mod_rewrite,因为它是一个symfony应用程序。

编辑:我已将以下.htaccess添加到项目的根目录

Options All -Indexes

<FilesMatch "\.(htaccess|htpasswd|ini|php|log|yml)$">
Order Allow,Deny
Deny from all
</FilesMatch>

这给了我一些信心。但我仍然不希望别人去:

mydomain.com/somestupidsubfolder

2 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteRule ^/(.*)$ /web/$1

答案 1 :(得分:0)

嗯,当你无法将你的资源放在webroot_dir之外时,这种托管是常见的问题。对安全性来说不行,但无所事事......我们应该把它放到网络根目录上。

因此,让所有资源都存储在'project'目录中:app,cache,config,data,lib,log,plugins,test等。 项目目录存储在webrootdir中,名为“httpdocs”


index.php包含类似的内容:

require_once(dirname(__FILE__).'/project/config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();

项目配置文件ProjectConfiguration.class.php包含:

//full path to autoload
require_once '/usr/local/www/vhosts/mywebsite.com/httpdocs/project/lib/symfony/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->setWebDir($this->getRootDir() . '/..'); // <<<-- this does the trick
    $this->enablePlugins(...);
  }
}

请勿忘记使用htaccess关闭源代码('project'dir)。

GL