2012-03-17 94 views
23

這幾天我正在使用Slim Framework作爲開發php web api的最簡單工具。 使用這兩篇​​文章:Slim Framework總是返回404錯誤

我遵循一些步驟從那裏。下載Slim Framework,將正確的目錄放在&文件中。調整啓動語句,如;

//1. Require Slim 
require('Slim/Slim.php'); 

//2. Instantiate Slim 
$app = new Slim(); 

//3. Define routes 
$app->get('/books', function ($id) { 
    //Show book with id = $id 
}); 

然後,我相應地修改其餘部分。

比如我的清單,已經完成:

  • 的LoadModule rewrite_module模塊/ mod_rewrite.so - >啓用
  • 修身的.htaccess:

RewriteEngine敘述上的RewriteCond%{} REQUEST_FILENAME !-f RewriteRule ^(。*)$ bootstrap.php [QSA,L]

但是,之後當我運行該語句;

$app->run(); 

而且我在我的瀏覽器上運行它....然後,我得到404錯誤,而在我的本地測試它。有什麼解決方案來解決這個問題?

僅供參考,這裏是我目前使用它的最簡單的PHP文件。 (shared Link)

回答

42

問題解決了!

我的apache實際上是正常的,早期提供的.htaccess文件也正常。

線索就是我用過的URL。 以前我使用了無效的URL,因此它返回了404頁錯誤。 當我嘗試通過瀏覽器訪問較新的GET URL時,我剛剛意識到這一點;

http://localhost/dev/index.php/getUsers/user1 

現在工作!

我剛剛意識到它,一旦我發現這些語句;

如果Slim沒有找到URI匹配HTTP請求 URI的路由,Slim會自動返回404 Not Found響應。

如果超薄找到具有匹配HTTP請求的URI路由URI但不 HTTP請求方法,苗條將自動返回一個405方法具有允許 不允許響應:其值列表HTTP 方法,這些方法對於可接受的報頭請求的資源。

+9

只是爲了澄清這個問題,什麼是您試圖之前,使用的網址是什麼? – RPDeshaies 2014-01-04 20:15:28

5

你說得對,包括你的文件中的index.php,但發生,因爲你不與你的MOD-重寫 請查看以下鏈接正常工作:

https://github.com/codeguy/Slim

在入門部分,你可以看到如何配置你的服務器(如果你使用的是Apache/lighttpd/ngynx)

0

我認爲你的問題是在「資源分析器」,因爲你沒有定義$ id請求中的參數,請Y本:

//1. Require Slim 
require('Slim/Slim.php'); 

//2. Instantiate Slim 
$app = new Slim(); 

//3. Define routes 
$app->get('/books/:id/', function ($id) { 
    echo json_encode(getBook($id)); 
}); 

// some stuff 
$app->run(); 

請告訴我們,如果這是確定

21

我發現這個職位,而谷歌搜索 「slimframework 404」。這篇文章讓我解決了我的問題。

的問題

我成立了一個位點上的超薄框架使用Composer並創建下面的示例代碼形式slimframework.com的index.php文件:

<?php 
$app = new \Slim\Slim(); 
$app->get('/hello/:name', function ($name) { 
    echo "Hello, $name"; 
}); 
$app->run(); 

然後我試着使用http://localhost/hello/bob訪問該頁面。我找回404頁面未找到頁面。

我能夠使用http://localhost/index.php/hello/bob訪問該頁面。

我發現該溶液通過查看/vendor/slim/.htaccess(包括瓦特/作曲苗條安裝)和超薄框架文檔的URL Rewriting部分。

我將/vendor/slim/.htaccess文件的副本添加到與我的index.php文件相同的文件夾中。該文件的內容是:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

現在我可以訪問該頁面使用http://localhost/hello/bob

+6

如果在添加正確的'.htaccess'文件後問題仍然存在,請確保您的虛擬主機配置了'AllowOverride'選項,以便可以使用.htaccess重寫規則: \t的AllowOverride所有 \t訂單拒絕,允許 \t從所有 \t' – anj 2015-06-26 16:48:40

+0

嗨@cutRateGamer允許,我使用所有的AllowOverride但服務器給我錯誤500 – 2016-02-11 12:22:43

+1

託德 - 伯茲奧爾答案+ ANJ評論表示溶液 – NachPD 2017-10-17 14:00:28

0

此外mod_rewrite.so模塊必須在httpd.conf加載或您會收到錯誤500

LoadModule rewrite_module modules/mod_rewrite.so 
1

對我來說,問題是,我都忘了提供.htaccess文件在我的文檔根目錄。

的.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 
0

如果你在Ubuntu上使用16苗條。04,你會得到404錯誤。從上面託德伯茲奧爾你可以做個試驗:

如果這個工程

http://localhost/index.php/hello/bob

這行不通

http://localhost/hello/bob

和.htaccess文件在同一目錄索引。 PHP和配置如下:

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule^index.php [QSA,L] 
    </IfModule> 

而你仍然在Apache上遇到404錯誤。

嘗試在Apache的mod_rewrite打開如下,重新啓動Apache:

$ sudo的a2enmod重寫

$ sudo的服務的Apache2重啓

苗條的API應該正常現在的工作是提供的.htaccess文件會只有在啓用了mod_rewrite的情況下才有效,而不是乾淨安裝的默認值。

這裏是如何關閉mod_rewirte,如果你需要。

$ sudo的a2dismod改寫

$ sudo的服務的Apache2重啓