Laravel 在图像/css/js 上抛出 404

问题描述 投票:0回答:3

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 和图像文件停止加载。

.htaccess laravel mod-rewrite
3个回答
3
投票

您的第一条规则本质上是“无论 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


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]

0
投票

@Tom 经过几天的研究和阅读许多不必要的帖子,您的简单解决方案就是答案。非常感谢

© www.soinside.com 2019 - 2024. All rights reserved.