14

我想从这个 url http://www.sample.com/amateur1访问我在生产环境( http://www.sample.com/amateur1/web/app.php )中的 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/amatur1时显示 404 错误,并且prod.log没有写入。

我也使用了RewriteBase /amateur1/web/,因为我不知道RewriteBase路径是相对于服务器的DocumentRoot,还是来自.htaccess文件所在的路径。由于这个答案Symfony2: How to deploy in subdirectory (Apache)也尝试/amateur1并作为 RewriteBase/amateur1/

通过三个尝试,“异常”页面显示为无样式,并且未加载任何图像。但随后我在 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 [] []

我做错了什么?

4

2 回答 2

24

在您的配置中,apachepublic_html用作文档根目录

如果 Symfony2 安装在 directory/home/u105859802/public_html/amateur1中,则要服务的 Symfony 公共目录是/home/u105859802/public_html/amateur1/web/

你应该使用

RewriteBase /amateur1/web/

但要小心,这并不安全
你必须保护你的 symfony 目录!(配置可访问)

你为什么不试着把你的 symfony 文件移动到你的私人区域呢?
您可以将 Symfony 网络目录重命名为public_html

在文档手册中查看如何做到这一点

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

  • /home/u105859802/
    • 小贩
    • 源代码
    • 应用程序
    • public_html (symfony2 中默认的 web) <- 唯一的公共目录
于 2013-02-15T10:56:39.500 回答
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]

这是我在项目中使用的规则。您可能需要以其他方式提供资产的完整路径,否则它们不会被加载。

于 2017-08-31T08:02:51.593 回答