.htaccess Laravel抛出404 on images/css/js

djmepvbi  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(92)

Laravel对我的图片,css和JavaScript文件抛出了一个404错误,这些文件位于/mysite/public中。我已经将/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和图像文件停止加载。

j2cgzkjk

j2cgzkjk1#

你的第一条规则基本上是说“不管URL是什么,都要加载index.php”。这意味着它永远不会加载你的资产,也就是物理文件夹,因为它只会加载index.php。例如,如果你试图加载css/image.png,它只会加载index.php。
如果你删除它,你的实际文件夹将加载,但其他URL不会重新写入index.php,这就是为什么它会中断。
你应该使用Laravel提供给你的.htaccess。这应该是你的.htaccess文件在public/文件夹中(根据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>

public/.htaccess

如果public文件夹不是服务器上的根目录,则还需要在其他.htaccess(位于public文件夹上方)中包含此文件夹

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

/.htaccess

vof42yt1

vof42yt12#

添加此规则以防止资产被路由到路由器

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]

相关问题