2010-05-11 104 views
3

我正在Symfony和本地主机(XAMPP)上开发一个应用程序我想模拟Web服务器上的相同条件。虚拟主机上的Symfony(文档根目录问题)

Web服务器的配置如下:

/www => mydomain.com 
/foo => foo.mydomain.com 
/bar => bar.mydomain.com 
... 

我要去把我的Symfony应用到/www direcotry所以就会有:

/www 
/www/apps 
/www/apps/frontend 
/www/apps/frontend/... 
/www/apps/backend 
/www/apps/backend/... 
/www/cache 
/www/config 
... and so on... 
/www/web 

的事情是,该文件根目录仍然设置为/www目录,但Symfony期望它位于/www/web
当然,如果我打电话给http://mydomain.com/web,它会起作用,但我想你明白这是安静的愚蠢解决方案。

所以我的问题是:有没有什么办法可以改变/绕过使用.htaccess的默认文档根设置?编辑:I solved it

+0

如果你解决你自己的问题,回答你的问题,并纪念这个问题的回答。 – 2013-06-05 13:35:19

回答

4

我对Symfony不太了解,但/web应该是文档根目录。由于安全原因,所有其他目录应位于文档根目录之外,并避免URL中的/web部分用于其他目录。但看起来你已经知道了。

如果您可以编辑Web服务器的配置,请尝试反映并将DocumentRoot设置为Web目录。

如果你不能做到这一点:这是不可能改变的.htaccess文件DocumentRoot但它有可能让他们去/web内部使用mod_rewrite重写所有请求。这很烂,但如果你不能影响DocumentRoot,可能是最好的解决方案。

我不是mod_rewrite大师,所以我不能提供一个例子(我将不得不先测试它,现在我不能这样做),但我相信有人会。也许在您的问题中添加mod_rewrite标记。

更新:未经测试,但应该工作。放入.htaccess文件/www

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_URI} !^/web/ 
RewriteRule .* /web/%1 [QSA] 

你就那么需要改变你的配置文件来使用,而不是http://www.domain.com/当然的http://www.domain.com/web/

我不能说这是否会干扰Symfony端的任何其他.htaccess规则 - 您必须尝试。

0

我你有手的Apache配置,更好的是从/www移动文档根目录/www/web在你的虚拟主机配置,并允许PHP(如果open_basedir配置指令限制)来访问整个/www目录。

+0

这正是我所不能的。我从来没有见过任何共享虚拟主机,你可以在哪里修改Apache配置:) – martin 2010-05-11 14:10:43

+0

好吧,我们已经做了一次与共享主机一起去除公共网络目录,将所有的sf项目放入共享主机root,然后重新创建www dir带有一个以web /目录为目标的符号链接,但不知道是否可以添加符号链接 – Benoit 2010-05-11 15:30:11

0

更改symfony的方式预计将被命名为您的目录:

// config/ProjectConfiguration.class.php 
class ProjectConfiguration extends sfProjectConfiguration 
{ 
    public function setup() 
    { 
    $this->setWebDir($this->getRootDir().'/www/or/whatever/directory'); 
    } 
}