我刚刚尝试第一次将 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 生产日志。