Laravel Public 文件夹可在 LAMP 服务器上访问
Laravel Public folder accessible on LAMP server
我急需帮助在 LAMP 服务器上设置我的 laravel 项目。
到目前为止,我已经在我的本地主机 xampp 服务器上测试了我的 "Pretty URLs",没有任何问题。现在我正尝试在实际的 LAMP 服务器上设置它,我 运行 遇到了问题
到目前为止,我已经安装了 LAMP 服务(Ubuntu、Apache2、MYSQL、PHP5(使用 curl 和 mcrypt))。目前我的 laravel 项目在我的主目录中,带有指向 /var/www/html 文件夹中的 public 文件夹的符号链接,就像这样... project, symlink.
我已将 /etc/apache2/apache2.conf 更改为以下配置
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后我使用命令 sudo a2enmod rewrite
并按照 laravel 文档中的说明编辑了我的 .htaccess 文件。
最后,我重新启动了我的 apache 服务:sudo service apache2 restart
,当我尝试转到 "mydomain.com/public" 时,我收到 403 禁止错误。
有没有人可以帮助我?
关于Apache
配置,好像没问题。我更喜欢禁用索引(以防止目录列表)和多视图(以防止隐式文件名模式匹配)。
<Directory /var/www/html>
Options +FollowSymLinks -MultiViews -Indexes
AllowOverride All
Require all granted
#some general directives could be handy here also
<FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)">
ExpiresActive on
ExpiresDefault "access plus 2 weeks"
</FilesMatch>
</Directory>
问题似乎与权限有关。 默认情况下 Apache
以 www-data:www-data
运行。这可以在 envvars
中更改(更改后应 Apache
重新启动)或作为编译时选项提供。 /etc/apache2/envvars
...
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...
不过,更好的方法是
- 用
sudo chown :www-data /var/www/html
将/var/www/html
组改为www-data
组
- 用
sudo chmod 2770 /var/www/html
将/var/www/html
的模式改为2770
。由于 Apache
需要执行权限才能访问该目录。递归地将此命令应用于其他目录
- 将您的 public 目录静态文件的模式更改为
2660
以采取安全措施
我急需帮助在 LAMP 服务器上设置我的 laravel 项目。 到目前为止,我已经在我的本地主机 xampp 服务器上测试了我的 "Pretty URLs",没有任何问题。现在我正尝试在实际的 LAMP 服务器上设置它,我 运行 遇到了问题
到目前为止,我已经安装了 LAMP 服务(Ubuntu、Apache2、MYSQL、PHP5(使用 curl 和 mcrypt))。目前我的 laravel 项目在我的主目录中,带有指向 /var/www/html 文件夹中的 public 文件夹的符号链接,就像这样... project, symlink.
我已将 /etc/apache2/apache2.conf 更改为以下配置
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后我使用命令 sudo a2enmod rewrite
并按照 laravel 文档中的说明编辑了我的 .htaccess 文件。
最后,我重新启动了我的 apache 服务:sudo service apache2 restart
,当我尝试转到 "mydomain.com/public" 时,我收到 403 禁止错误。
有没有人可以帮助我?
关于Apache
配置,好像没问题。我更喜欢禁用索引(以防止目录列表)和多视图(以防止隐式文件名模式匹配)。
<Directory /var/www/html>
Options +FollowSymLinks -MultiViews -Indexes
AllowOverride All
Require all granted
#some general directives could be handy here also
<FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)">
ExpiresActive on
ExpiresDefault "access plus 2 weeks"
</FilesMatch>
</Directory>
问题似乎与权限有关。 默认情况下 Apache
以 www-data:www-data
运行。这可以在 envvars
中更改(更改后应 Apache
重新启动)或作为编译时选项提供。 /etc/apache2/envvars
...
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...
不过,更好的方法是
- 用
sudo chown :www-data /var/www/html
将 - 用
sudo chmod 2770 /var/www/html
将/var/www/html
的模式改为2770
。由于Apache
需要执行权限才能访问该目录。递归地将此命令应用于其他目录 - 将您的 public 目录静态文件的模式更改为
2660
以采取安全措施
/var/www/html
组改为www-data
组