最近では、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
});
そして、それに応じて残りを変更します。
すでに行った私のチェックリストなど:
RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteRule ^(。*)$ bootstrap.php [QSA、L]
しかし、一度このステートメントを実行すると、
$app->run();
そして、ブラウザで実行します。..そして、Localhostでテスト中に404 Errorを取得しました。それを修正するための解決策は何ですか?
参考までに、これは私の最も簡単なPHP現在使用しているファイル。 (共有リンク)
問題は解決しました!
私の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応答を自動的に返します。
「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
を使用してページにアクセスできます。
Index.phpをファイルに含めようとしていますが、mod-rewriteが適切に機能していないために発生します。次のリンクを確認してください。
https://github.com/codeguy/Slim
「はじめに」の部分では、サーバーの構成方法を見ることができます(Apache/lighttpd/ngynxを使用している場合)
私にとって問題は、ドキュメントルートに.htaccess
ファイルを提供するのを忘れていたことです。
。htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
リクエストで$ 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();
大丈夫かどうか教えてください
Ubuntu 16.04でSlimを使用していて、404エラーが表示される場合。上記のTod Birdsallからこのテストを試してください。
これが機能する場合
http://localhost/index.php/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の再起動
以前のものが機能しないために回答を検索する人にとって、これは私のために機能します:
RewriteBase /<base_of_your_project>/
さらに、mod_rewrite.so
モジュールをhttpd.conf
にロードする必要があります。そうしないと、エラー500が表示されます。
LoadModule rewrite_module modules/mod_rewrite.so