虚拟主机上的Symfony(文档根问题)

时间:2010-05-11 10:18:10

标签: php mod-rewrite symfony1 xampp shared-hosting

我正在Symfony和localhost(XAMPP)上开发一个应用程序我想模拟与网络服务器相同的条件。

Web服务器配置如下:

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

我要把我的Symfony应用程序放到/www目录中,这样就会有:

/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

3 个答案:

答案 0 :(得分:4)

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

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

如果您不能这样做:无法更改DocumentRoot文件中的.htaccess,但可以重写所有请求,以便他们在内部/web使用{ {1}}。它很蹩脚,但如果你不能影响mod_rewrite,那可能是最好的解决方案。

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

更新:未经测试但 应该工作。放入mod_rewrite中的.htaccess文件:

/www

然后,您需要更改配置文件,使用RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !^/web/ RewriteRule .* /web/%1 [QSA] 代替http://www.domain.com/

我不能说这是否会干扰Symfony端的任何其他http://www.domain.com/web/规则 - 你必须尝试一下。

答案 1 :(得分:0)

我接受了apache配置,更好的方法是在virtualHost配置中将文档根目录从/www移动到/www/web并允许php(如果受open_basedir配置指令限制)到访问整个/www目录。

答案 2 :(得分:0)

更改symfony期望命名目录的方式:

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