【问题标题】:Laravel throwing 404 on images/css/jsLaravel 在图像/css/js 上抛出 404
【发布时间】:2016-05-18 20:47:24
【问题描述】:

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

【问题讨论】:

  • 您是否将“public”设置为服务器上的根文件夹?
  • 是的 public 是我服务器上的根文件夹
  • 你的资产是否像public/asset/css/一样公开?
  • 是的,我的资产是公开的

标签: .htaccess laravel mod-rewrite


【解决方案1】:

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

public/.htaccess

如果公用文件夹不是您服务器上的根目录,您还需要在附加的 .htaccess 中拥有它(在公用上面的文件夹中)

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

/.htaccess

【讨论】:

  • 你刚刚拯救了我的一天!在公用文件夹外添加 .htaccess 后,现在应用程序运行良好,非常棒,谢谢!
  • 男人!!老哥长寿!我部署了我工作了 45 天的 laravel 项目,并意识到它会向每个 JS\CSS\IMAGE 抛出 404 ......我整晚都在试图让它工作......你救了我!谢谢你!
【解决方案2】:

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

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]

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2021-10-14
    • 2018-07-20
    • 2018-11-06
    • 1970-01-01
    • 2019-04-25
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多