0

私は CodeIgniter に Phil Sturgeon の REST サーバーを使用しており、次のような URL をサポートできるように機能を変更したいと考えています。

http://api.example.com/users
http://api.example.com/users/1

次のようにサポートされているユーザーの代わりに、ユーザーのリストと単一のユーザーをそれぞれ取得するには:

http://api.example.com/users
http://api.example.com/users?id=1

彼のブログで、これは mod_rewrite を使用して可能であるはずだと読みましたが、これを期待どおりに機能させることができませんでした。

デフォルトの CodeIgniter .htaccess は次のようになります。

RewriteEngine on

RewriteCond $1 !^(index\.php|css|images|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

そして、この機能を実現するために独自のルールを追加しようとしました。これは、正しく動作することを期待していたものです。これは、RewriteEngine のアクティブ化の後、CodeIgniter ルールの前に配置されます。

RewriteRule ^users/([0-9+]) /users?id=$1 [NC]

これは、CodeIgniter を介してルーティングされる次のルールにカスケードし、正しいusers.phpコントローラーにヒットし、次にindex_getメソッド (REST サーバーによって再マップされる) にヒットすると考えました。

代わりに、「不明なメソッド」エラーが発生します。たとえば、CodeIgniter がユーザー整数を関数として使用しようとしているように見えusers/12ます。12()users.php

ここで何がうまくいかないのか、またはこの問題の解決策を推奨できる人はいますか?

4

1 に答える 1

1

CodeIgniter はフロント コントローラー パターンを使用し、クリーンな URL をサポートします。これは、要求を透過的に受け取り、希望どおりにルーティングできる必要があることを意味します。index.phpすべてのリクエストを CodeIgniter にルーティングするように Web サーバーを設定し、その構成ファイルを適切に変更できるはずです。

ファイルを編集system/application/config/config.phpして index_page 変数を設定します: $config['index_page'] = '';. .htaccess次に、 Apache でファイルまたは仮想ホスト構成ファイルを編集して、次のようなものを使用します。

# Turn on the rewriting engine.
RewriteEngine On
# Default rewrite base to /
RewriteBase /

# Rewrite if the request URI begins with "system":
RewriteCond %{REQUEST_FILENAME} ^system
RewriteRule ^(.*)$ index.php/$1 [NC,L]

# Or if it points at a file or directory that does not exist:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Also rewrite it to the front controller.
RewriteRule ^(.*)$ index.php/$1 [NC,L]

編集: CodeIgniter はデフォルトでクエリ文字列または URI セグメント スタイルのいずれかを選択する必要があると述べている著者自身からのこの回答を確認してください。

編集 2:ああ、おっしゃる意味がわかりました。クエリ変数名を URI セグメントとして使用したくない場合。すべてのクエリをそのコントローラーの単一のメソッドに送信するように、routes ファイルを変更することでおそらくこれを修正できます。

于 2012-07-24T07:28:47.287 に答える