Laravel 对位于
/mysite/public
中的图像、css 和 javascript 文件抛出 404 错误。我已将 /mysite/public
设置为网站的根文件夹,我的所有资源都位于其中。
我对此错误进行了谷歌搜索,但他们都给出了相同的解决方案,即
{{asset('css/style.css')}}
。我已经像这样设置了链接,所以我认为这不是问题。
我认为该错误与我的重写规则有关,但我只是无法弄清楚它是什么。
我网站的 .htaccess 文件是:
RewriteEngine On
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.my-site.com/$1 [R,L]
</IfModule>
如果我删除第一个 RewriteRule,我的 css 加载正常,但主页以外的页面将开始抛出 404 错误。如果我把它放回去,其他页面工作正常,但 css、js 和图像文件停止加载。
您的第一条规则本质上是“无论 URL 是什么,都加载 index.php”。这意味着它永远不会加载您的资产(物理文件夹),因为它只会加载index.php。例如,如果您尝试加载 css/image.png,它只会加载 index.php。
如果删除它,您的实际文件夹将加载,但其他 URL 不会重新写入 index.php,这就是它会损坏的原因。
您应该使用 Laravel 提供给您的 .htaccess。这应该是 public/ 文件夹中的 .htaccess 文件(根据 Laravel Github 存储库)
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$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}]
</IfModule>
公共/.htaccess
如果公用文件夹不是服务器上的根目录,您还需要将其放在附加的 .htaccess 中(位于 public 上方的文件夹中)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
/.htaccess
添加此规则以防止资产被路由到路由器
RewriteEngine On
# Don't rewrite for css/js/img assets
RewriteRule ^assets/.* - [L]
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.my-site.com/$1 [R,L]
@Tom 经过几天的研究和阅读许多不必要的帖子,您的简单解决方案就是答案。非常感谢