2012-08-03 191 views
49

我剛開始學習Laravel框架,並且遇到了路由問題。Laravel路線不工作?

正在工作的唯一路線是開箱即用的Laravel附帶的默認主路線。

我在Windows上使用WAMP,它使用PHP 5.4.3和Apache 2.2.22,並且我也啓用了mod_rewrite,並從application.php配置文件中刪除了'index.php'以離開一個空的字符串。

我已經創建了一個名爲用戶新的控制器:

class User_Controller extends Base_Controller { 

    public $restful = true; 

    public function get_index() 
    { 
     return View::make('user.index'); 
    } 
} 

我創建了一個應用程序/視圖/用戶/視圖文件名爲的index.php有一些基本的HTML代碼,在routes.php文件我已經添加了以下內容:

Route::get('/', function() 
{ 
return View::make('home.index'); 
}); 

Route::get('user', function() 
{ 
return View::make('user.index'); 
}); 

到工程第一條路線罰款參觀我的網頁瀏覽器的根目錄(http://localhost/mysite/public)時,但是當我嘗試去我塞康d路線與http://localhost/mysite/public/user我收到404 Not Found錯誤。爲什麼會發生這種情況?

+2

你的'.htaccess'如何? – Michelle 2012-08-03 07:48:29

+0

.htaccess是未修改的,就像它是開箱即用的。 – JasonMortonNZ 2012-08-03 07:51:35

+0

看來WAMP是個問題。現在已經改爲XAMPP,並且一切都很好,並且應該如此。我是否應該自問這個問題,解釋WAMP是個問題? – JasonMortonNZ 2012-08-04 02:48:49

回答

20

您是否嘗試過加入給你的路線文件,而不是Route::get('user', "[email protected]")

@user在這種情況下,之前的一段文本,將在頁面直接向用戶控制器和@index後的一段文字,直接將劇本給user功能public function get_index()

我看到您使用的是$restful,在這種情況下,您可以將Route設置爲Route::any('user', '[email protected]')。這將同時處理POSTGET,而不是單獨寫出它們。

+0

由於問題依然存在,我將從WAMP更改爲XAMPP。在XAMPP服務器上啓動一個新項目並使用'@'符號代替'。'後它現在工作得很好。 – JasonMortonNZ 2012-08-04 02:46:19

+1

它適用於WAMP,您只需啓用rewrite_module即可。請參閱下面的@ Muvera的評論。 – ajon 2015-01-03 18:21:18

+2

我知道這是一箇舊的答案,但我有一個類似的問題:一條新的路線被添加,並沒有工作! (404)。我只需要清除緩存的路線!使用php工匠路線:清除 – trainoasis 2015-12-22 08:27:15

5

路線

使用它們來定義不是由控制器進行管理的具體路線。

控制器

當你想使用傳統的MVC架構

解決您的問題

,除非你想有一個特定的「命名你不註冊控制器所使用的路線使用它們'控制器行動的路線。

而不是爲你的控制器操作的路線,只需註冊您的控制器:

Route::controller('user'); 

現在你的控制器被註冊,您可以導航到http://localhost/mysite/public/user和你get_index將會運行。

您也可以註冊的所有控制器都一氣呵成:

Route::controller(Controller::detect()); 
0

嘗試在你的php.ini中啓用短php標籤。 WAMP通常會關閉它們,並且laravel需要它們。

+0

等等,什麼? Laravel需要短標籤嗎? – bishop 2014-10-24 13:29:06

25

您是否嘗試過檢查

http://localhost/mysite/public/index.php/user 

是工作?如果是這樣,請確保所有路徑的文件夾都沒有任何大寫字母。我遇到了同樣的情況,並且將信件轉換爲小寫字母。

+0

謝謝。我正在一步一步瀏覽Laravel的書(Laravel Starter),並被封鎖到封閉(第13頁)。這爲我解決了這個問題。 – 2013-02-05 19:33:26

+0

這解決了我的問題。我在破解laravel的htaccess的apache文件夾的根目錄下有一個.htaccess文件。 – Maarten00 2013-12-11 10:51:28

+0

這解決了我的其他問題。使用Laravel生成頁面,Angular調用REST,在Windows上調用'api/branches'工作,但在linux上,我必須更改這個URL,如:'index.php/api/branches' 任何解決方法這有相同的網址? – miroslavign 2015-09-23 09:57:38

62

使用WAMP點擊WAMP的圖標 - > apache->的Apache模塊 - >滾動和檢查rewrite_module 重新啓動一個 的LoadModule rewrite_module

注意,服務器應用程序會自動爲你一旦啓用 「rewrite_module」 重新開始

+3

謝謝解決了我的問題! – funerr 2013-02-06 17:39:56

+0

非常感謝,從昨天開始就試圖對這個問題進行排序 – Moe 2013-11-24 12:29:20

+2

每次我在計算機上安裝/重新安裝WAMP和Laravel時,這似乎都發生在我身上。這始終是問題。希望它會最終承諾內存;) – Zuko 2013-12-13 07:53:59

3

不要在public/.htaccess忘記 「RewriteBase」:

例如:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /your/folder/public 
+0

你把這個放在哪裏? – Goddard 2015-02-06 22:42:18

6

我使用EasyPHP時遇到了同樣的問題。發現我必須在httpd.conf<Directory>區塊中指定AllowOverride All。沒有這個,Apache有時會忽略你的.htaccess

礦最終看上去像這樣...

<Directory "D:/Dev"> 
    Options FollowSymLinks Indexes 
    #### NEXT IS THE CRUCIAL LINE #### 
    AllowOverride All     
    Order deny,allow 
    Allow from 127.0.0.1 
    Deny from all 
    Require all granted  
</Directory> 
+0

我在Debian GNU/Linux 7.6上發現,除了爲apache2啓用模塊(a2enmod rewrite)之外,此響應還提供了所需的部分內容。 – 2014-09-08 19:16:32

0
Route::get('/', function() 
{ 
return View::make('home.index'); 
}); 

Route::get('user', function() 
{ 
return View::make('user.index'); 
}); 

變化上面

你必須在年底前使用 '/'(住宅/默認)您路線

2

好吧,等一天之後,我在這個問題上抨擊我一下......我起牀並做了我昨天應該做的事情,並且D咕what着發生了什麼事!

Laravel正在嘗試在這裏執行的操作是在文件路徑前面插入文件index.php。舉例來說,如果您在瀏覽器中指定Route::get('/account/create', ...,並在localhost/laravel/authenticate/public/account/create之間執行您的應用程序,則laravel想要執行localhost/authenticate/public/index.php/account/create,但要這麼做...... Apache需要通過/wamp/www/laravel/laravel/authentication/public查看請求(您的路徑可能有所不同,取決於您的laravel應用程序實際安裝的位置,但尾隨的public是需要進行替換的位置)必須應用「重寫規則」。

謝天謝地,laravel在正確的.htaccess文件中提供了正確的重寫規則,就在您的應用的public文件夾中。問題是,'.htaccess'文件中的代碼不能用WAMP配置的方式工作。這個SEEMS的原因是muvera在這個線程頂部提出的問題 - 在RewriteRule的東西可以工作之前,需要由Apache加載rewrite_module代碼。這是有道理的。

部分是沒有意義的:只需stoppingrestarting Apache服務不會拿起WAMP用你的RewriteRule做正確的事情所必須的改變 - 我知道,我嘗試了很多次!

什麼工作:使muvera建議的更改(請參閱線程頂部)加載正確的模塊。然後,重置您的整個Windows會話,從而將Apache從內存中徹底刪除。重新啓動(重新加載)WAMP和VOILA!修復工程,正確的RewriteRule應用,yada,yada;我從此過上幸福快樂的生活。

好消息是:我現在知道更多關於.htaccess,RewriteRulehttpd.conf文件的信息。有一個很好的(性能)參數用於將邏輯從應用程序的public.htaccess文件中移出,並將其放入Apache'bin'文件夾中的httpd.conf的Directory ...部分(特別是如果您有權訪問該文件夾)。

54

在我的Ubuntu LAMP安裝中,我通過以下2個更改解決了此問題。

  1. 在apache服務器上啓用mod_rewrite:sudo a2enmod rewrite
  2. 編輯/etc/apache2/apache2.conf中,改變爲/ var/www目錄中有 「AllowOverride」 指令(這是我的主文檔根目錄):AllowOverride All

然後重新啓動Apache服務器: service apache2 restart

+0

這解決了這個問題,我在一個從puphpet下載的流浪機器上。 – winkbrace 2015-02-04 22:08:26

+3

謝謝,你是救命恩人。 – 2015-05-30 15:12:42

+3

非常感謝,我浪費了4個小時才找到這個 – 2015-08-18 10:04:18

0

必須使用Laravel 5命令

class User_Controller extends Controller { 
    public $restful = true; 
    public function get_index(){ 
    return View('user.index'); 
    } 
    } 

和routes.php文件

Route::get('/', function() 
    { 
    return view('home.index'); 
    }); 

    Route::get('user', function() 
    { 
    return view('user.index'); 
    }); 

Laravel 5視圖和控制器命令改變看到的文檔我是具有在終端之前

0

只是運行同樣的錯誤。

composer dump-autoload 
5

你可以嘗試移動root/public/.htaccessroot/.htaccess,它應該工作

+2

您發佈了與8個問題完全相同的答案。如果你認爲它們是重複的,你應該將它們標記爲這樣,而不是爲每個答案發布答案​​。 – Jaap 2016-12-22 19:45:18

0

的路線不工作的主要問題是存在的MacOS mod_rewrite.so模塊,Linux的不阿帕奇的httpd.conf文件中啓用配置,所以可以.htaccess工作。 我已經通過取消對線解決了這個:

的LoadModule rewrite_module的libexec/apache2的/ mod_rewrite.so

從上方線httpdf.conf卸下#。然後它會起作用。請享用!

0

我想你已經刪除了laravel公用文件夾中的默認.htaccess文件。上傳它應該解決您的問題的文件。