我正在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。
答案 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');
}
}