web-dev-qa-db-ja.com

Slim Frameworkは常に404エラーを返します

最近では、PHP Web APIを開発するための最も単純なツールとしてSlim Frameworkを使用しています。次の2つの記事を使用します。

そこからいくつかの手順に従います。 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 modules/mod_rewrite.so->有効
  • スリムな.htaccess:

RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteRule ^(。*)$ bootstrap.php [QSA、L]

しかし、一度このステートメントを実行すると、

$app->run();

そして、ブラウザで実行します。..そして、Localhostでテスト中に404 Errorを取得しました。それを修正するための解決策は何ですか?

参考までに、これは私の最も簡単なPHP現在使用しているファイル。 (共有リンク)

24
gumuruh

問題は解決しました!

私のApacheは実際には正常であり、以前に提供された.htaccessファイルも正常です。

手がかりは、私が使用したURLです。以前は無効なURLを使用していたため、404ページエラーが返されました。これを使用して、ブラウザを介して新しいGET URLにアクセスしようとしたときに気づきました。

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

そして今、それは動作します!

これらの声明を見つけたらすぐに気づきました。

SlimがHTTPリクエストURIと一致するURIを持つルートを見つけられない場合、Slimは自動的に404 Not Foundレスポンスを返します。

Slimは、HTTP要求URIに一致するがHTTP要求メソッドに一致しないURIを持つルートを見つけると、要求されたリソースに受け入れられるHTTPメソッドを値がリストするAllow:ヘッダーを持つ405 Method Not Allowed応答を自動的に返します。

45
gumuruh

「slimframework 404」をグーグルで検索しているときにこの投稿を見つけました。投稿は私の問題の解決に私を導いた。

問題

Composer を使用してSlimフレームワークでサイトをセットアップし、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(w = Composer Slim install)とスリムフレームワークドキュメントの RL 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を使用してページにアクセスできます。

26
Tod Birdsall

Index.phpをファイルに含めようとしていますが、mod-rewriteが適切に機能していないために発生します。次のリンクを確認してください。

https://github.com/codeguy/Slim

「はじめに」の部分では、サーバーの構成方法を見ることができます(Apache/lighttpd/ngynxを使用している場合)

5
Darkaico

私にとって問題は、ドキュメントルートに.htaccessファイルを提供するのを忘れていたことです。

。htaccess

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

リクエストで$ idパラメータを定義していないので、あなたの問題は「リソースパーサー」にあると思うので、これを試してください:

//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();

大丈夫かどうか教えてください

0
Ger Soto

Ubuntu 16.04でSlimを使用していて、404エラーが表示される場合。上記のTod Birdsallからこのテストを試してください。

これが機能する場合

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

これは機能しません

http:// localhost/hello/bob

index.phpと同じディレクトリにある.htaccessファイルは、次のように構成されます。

    <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 rewrite

$ SudoサービスApache2の再起動

提供された.htaccessファイルはmod_rewriteが有効で、クリーンインストールのデフォルトではない場合にのみ機能するため、Slim APIは正しく動作するようになりました。

必要な場合にmod_rewirteをオフにする方法を次に示します。

$ Sudo a2dismod rewrite

$ SudoサービスApache2の再起動

0
Cosworth66

以前のものが機能しないために回答を検索する人にとって、これは私のために機能します:

RewriteBase /<base_of_your_project>/
0
Efbi

さらに、mod_rewrite.soモジュールをhttpd.confにロードする必要があります。そうしないと、エラー500が表示されます。

LoadModule rewrite_module modules/mod_rewrite.so
0
user2454565