Symfony 的 PHP 文件在生产服务器上不起作用

Symfony 的 PHP 文件在生产服务器上不起作用

我刚刚尝试第一次将 Symfony (3.3.5) 项目部署到生产环境中,但遇到了一点麻烦。

MySQL 已安装并运行在服务器上,Symfony 可以连接到它。Apache2 和 PHP 也在运行。(并且简单的 PHP 文件像echo "hello world"预期的那样工作)。

我有两点看法:

首先:当我尝试访问http://example.com/web/app.php“页面无法正常工作”(这是 Chrome 错误消息),错误代码为 500。其他任何 URL 也会出现同样的情况,例如http://example.com/web/app.php/login

第二:为什么我仍然必须使用路由/web/app.php(如果我不使用它,服务器会向我显示 Web 服务器的目录资源管理器)而我的 .htaccess 文件如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ web/$1 [QSA,L]
</IfModule>

我的/etc/apache2/sites-available/example.com.conf文件是:

<VirtualHost *:80>

    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias dev.gepacte.com
    DocumentRoot /var/www/example.com/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/example.com/public_html">
        <IfModule sapi_apache2.c>
            php_admin_flag engine on
        </IfModule>
        <IfModule mod_php5.c>
            php_admin_flag engine on
        </IfModule>
        #If one of the following lines is uncommented, the apache2 serve won't restart.
        #DirectoryIndex app.php
        #Options -Indexes
        #AllowOverride All
        #Allow from All
    </Directory>

</VirtualHost>

当然,我的 symfony 项目位于/var/www/example.com/public_html

编辑:

我的/var/log/apache2/access.log文件:

80.215.95.207 - - [07/Nov/2017:18:22:44 +0100] "GET /web/app.php/ HTTP/1.1" 500 716 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

以及/var/log/apache2/error.log文件:

[Tue Nov 07 18:24:20.542808 2017] [mpm_prefork:notice] [pid 17564] AH00169: caught SIGTERM, shutting down [Tue Nov 07 18:24:20.723226 2017] [mpm_prefork:notice] [pid 22562] AH00163: Apache/2.4.25 (Debian) configured -- resuming normal operations [Tue Nov 07 18:24:20.723301 2017] [core:notice] [pid 22562] AH00094: Command line: '/usr/sbin/apache2'

答案1

我假设您有 apache 2.4 并且 apche 由用户 www-data 提供服务。

在 var 文件夹中设置写入权限

检查您是否具有正确的权限

chown -R www-data:www-data /var/www/example.com/public_html/var
chmod -R 777 /var/www/example.com/public_html/var
rm -rf /var/www/example.com/public_html/var/cache/{dev|prod}
rm -rf /var/www/example.com/public_html/var/logs/*

Apache 设置

您只需公开 Web 文件夹,而不是完整的项目。

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias dev.gepacte.com
    DocumentRoot /var/www/example.com/public_html/web
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory "/var/www/example.com/public_html/web">
        <IfModule sapi_apache2.c>
            php_admin_flag engine on
        </IfModule>
        <IfModule mod_php5.c>
            php_admin_flag engine on
        </IfModule>
        AllowOverride All
        Options -Indexes FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

删除此内容

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ web/$1 [QSA,L]
</IfModule>

前几个请求将会失败,因为 symfony 将重建缓存,请耐心等待,几分钟后它就会工作。

之后检查你的 symfony 生产日志。

相关内容