最近,我在Laravel项目中添加了一个CSS框架,该框架一直运行良好,直到我去使用可以在深层嵌套文件夹中作为字体文件找到的图标集为止。
我设置了Laravel Mix,将frameworks文件夹的目录复制到我的公众面前,如下所示:
.copyDirectory('node_modules/semantic-ui-css/themes', 'public/css/themes')
为清楚起见,文件及其文件夹已被完美复制,URL看起来也很好。所有的文件夹和文件似乎都具有正确的所有权和权限,与网站其他位置所使用的所有权和权限相同。
导航到<domain>/css/themes/default/assets/fonts/icons.woff2
时,我得到403并显示“访问被拒绝。”字样,如果我在/public/css
中创建自己的文件夹并向其中添加文件,也比{{ 1}}就是403。
在这一点上,我相当确定问题是Nginx配置(下面部分显示)或我错过的Laravel本身的某些配置。
/css
这个让我感到困惑,在玩弄它并搜索类似问题后,我没有任何进展。任何帮助将不胜感激。
答案 0 :(得分:2)
将nginx位置拆分为两个不同的位置。这将允许nginx分别提供资产和php文件:
server {
listen 80;
server_name _;
index index.php;
root /path/to/your/public/directory;
rewrite ^(.+)/$ $1 permanent; # removing trailing slashes
# Location for all files, including assets
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Location for php files
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
答案 1 :(得分:0)
您的.htaccess文件应如下所示 选项-MultiViews
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$public /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
和css文件的路径一样正常
<link href="{{ url('/') }}/css/custom.css" rel="stylesheet" type="text/css" />