我始终确保我的应用程序代码,配置文件,日志等存储在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
答案 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