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和图像文件会停止加载。
答案 0 :(得分:1)
您的第一条规则基本上是&#34;无论URL是什么,请加载index.php&#34;。这意味着它永远不会加载您的资产,这是物理文件夹,因为它只会加载index.php。例如,如果您尝试加载css / image.png,则只会加载index.php。
如果删除它,您的实际文件夹将会加载,但其他网址不会重新写入index.php,这就是它会破坏的原因。
您应该使用Laravel为您提供的.htaccess。这应该是你公共/文件夹中的.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(在公共文件夹中)中使用此文件夹
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
<强> /。htaccess的强>
答案 1 :(得分:0)
添加此规则以防止资产路由到路由器
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]