2013-08-05 52 views
2

我在我的Laravel第一個項目工作,這是一個簡單的網站管理面板:實際目錄覆蓋Laravel路線

在我的「公共」文件夾,我已經叫「管理員」,我把所有的目錄樣式和腳本對應於管理面板。我也以我的應用程序來處理「管理員」 GET定義的路由:

Route::get('/admin', 'Admin\[email protected]'); 

的問題是,因爲我有我的公開目錄「管理」文件夾Laravel是忽略了「管理」路線我定義,所以我不能訪問正確的控制器。我懷疑它與.htaccess有關,但我不知道如何解決它。這是我的htaccess的樣子現在:

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
+0

如果您騎過htaccess,並直接訪問管理文件,這意味着您將不會使用laravel作爲管理部分。你的意圖是? – Laurence

+0

對不起,我輸入錯誤我正在使用的臨時修復...基本上問題是,當我去http:// localhost/public/admin我得到「管理員」目錄,而不是我通過路由分配的控制器。 php – enzo

+0

你爲什麼要把admin文件夾放在公共目錄下?它應該在Laravel的應用程序/控制器目錄中 – Laurence

回答

2

你不能有相同的名稱作爲路線的公共目錄 - 否則怎麼會Laravel知道「/ admin」的是否是控制器,或者風格等。

,可以儲存在你的管理風格表等/資產/管理/ *

-1

對於routes.php文件:

Route::controller('admin/dashboard', 'Admin\DashboardController'); 

對於您的公共容器ÿ使用資產OU現在可以使用:

<script type="text/javascript" src="{{Request::root();}}/assets/js/jquery.js"></script> 

凡在/public/assets/js/jquery.js

希望這有助於資產。

1

的問題是與以下行:

RewriteCond %{REQUEST_FILENAME} !-d 

在您的例子這告訴Web服務器不發送到Laravel的/管理的路線,因爲它是一個物理目錄。如果你刪除它,那麼/管理路線應該工作。然而,這將阻止直接瀏覽到一個文件夾並獲得目錄列表,這應該不成問題。 htaccess中的下一行將允許您鏈接到管理目錄中包含的資產文件,而不是由Laravel處理它們,因此不應刪除。

Laravel的較新版本還包含:

# Redirect Trailing Slashes... 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

應該更新,以避免在管理路線上的重定向循環如下:

# Redirect Trailing Slashes... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

所以,如果使用最新版本的Laravel,你的htaccess文件應該是這樣的:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule>