2016-02-09 40 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]