如何在共享主机上部署Symfony2?

时间:2013-02-15 07:20:18

标签: .htaccess mod-rewrite symfony shared-hosting

我想从此网址http://www.sample.com/amateur1/web/app.php访问生产环境(http://www.sample.com/amateur1)中的symfony应用。

为此,我使用以下内容将.htacces文件移至http://www.sample.com/amateur1/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /web/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

但是当我转到http://www.sample.com/amateur1时显示404错误,并且 prod.log 未写入。

我还使用了RewriteBase /amateur1/web/因为我不知道如果 RewriteBase 路径是相对于服务器的 DocumentRoot ,还是来自< em> .htaccess 文件位于。由于此回答,我还尝试/amateur1/amateur1/作为RewriteBase Symfony2: How to deploy in subdirectory (Apache)

使用三个试用版,“例外”页面显示为无样式,并且未加载任何图像。但是后来我在prod.log文件中收到以下错误:

[2013-02-15 02:06:47] request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /amateur1/" (uncaught exception) at /home/u105859802/public_html/amateur1/app/cache/prod/classes.php line 5121 [] []

我做错了什么?

2 个答案:

答案 0 :(得分:24)

在您的配置中,apache使用public_html作为文档根

如果Symfony2安装在目录/home/u105859802/public_html/amateur1中,则要提供的Symfony公共目录为/home/u105859802/public_html/amateur1/web/

你应该使用

RewriteBase /amateur1/web/

但要注意,这不安全
您必须保护您的symfony目录! (配置可访问)

为什么不尝试在您的私人区域移动您的symfony文件?
您可以将Symfony Web目录重命名为public_html

请参阅how to do that in documentation cookbook

所以,我的推荐结构如下所示:

  • /家庭/ u105859802 /
    • 供应商
    • SRC
    • 应用
    • public_html (symfony2默认为网络)&lt; - 唯一的公共目录

答案 1 :(得分:0)

在大多数共享主机中,您无法覆盖Apache设置,在这种情况下可能需要在.htaccess文件中使用重定向规则

Options +FollowSymLinks +ExecCGI

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteRule !^projectName/ /projectName/web/app.php/%{REQUEST_URI} [L,NC]

这是我在项目中使用的规则。 您可能需要以其他方式提供资源的完整路径。

相关问题