2016-02-09 44 views
0

Laravel在位于/mysite/public的我的图像,css和javascript文件上抛出404错误。我已将/mysite/public设置为网站的根文件夹,并且我的所有资产都位于此处。Laravel在404上投掷图像/ css/js

我做了一个谷歌搜索这个错误,但他们都给了相同的解决方案,即{{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> 

如果我删除第一重写规则,我的CSS加载罚款,但其他的网页,该网页将开始抛出一个404错误。如果我把它放回去,其他页面工作正常,但CSS,JS和图像文件停止加载。

+0

你要为“公”为您服务器的根文件夹? – Tom

+0

是公开的是我的服务器上的根文件夹 –

+0

是否是公共资源,比如'public/asset/css /'? – WebChemist

回答

1

你的第一条规则实质上是说“不管URL是什么,加载index.php”。这意味着它永远不会加载您的资产,这是物理文件夹,因为它只会加载index.php。例如,如果您尝试加载css/image.png,它将只加载index.php。

如果删除它,您的实际文件夹将会加载,但是其他URL不会被重写到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

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]