Laravel在图像/ css / js上投掷404

时间:2016-02-09 01:17:45

标签: .htaccess laravel mod-rewrite

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

2 个答案:

答案 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]