2011-01-20 10 views
1

私は自分のWebサービス用のRESTful APIを作成しています。
は、私は次のパターンのすべてのコールが、それは/myserver/api/controller.php パターンで配置されているPHPファイルをトリガしたいのです:
ます。http:/www.mydomain.com/api/user
http:/www.mydomain.com/api/resource基本的にRewriteCond on .htaccess

http://www.mydomain.com/api/のすべてのコールが*現在

を/api/controller.phpトリガすべき、私の.htaccessは/ APIであり、次のようになります。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . controller.php 

UPDATE 1:
親ディレクトリで.htaccessファイルは次のとおりです。

RewriteEngine On 
RewriteCond %{HTTP_HOST} !:9000$ 
RewriteCond %{SCRIPT_FILENAME} \.php$ [OR] 
RewriteCond %{REQUEST_URI} ^$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}:9000/$1 [P,L] 
RedirectMatch 301 /jobs$ http://someurl 
RedirectMatch 301 /support/$ http://someurl 
RedirectMatch 301 /jobs$ http://someurl 
RedirectMatch 301 /someurlA http://someurlB 

どのように私は.htaccessファイルを作成する必要がありますか?

ありがとうございます!

+0

だから、問題は何ですか? – Artefacto

+0

これは動作しません...たとえば、www.mydomain.com/api/user/123の404が表示されます。 –

+0

httpd.confにAllowOverride Noneがありますか? RewriteLogとRewriteLogLevelを使ってログオンして、何が起きているのかを確認してください。 – Artefacto

答えて

1
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.* controller.php [L] 

更新:

RewriteEngine On 
RewriteBase /api 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.* controller.php [L] 
+0

私はこれを試みたが、それはまだcontroller.phpの代わりに404を示す別のアイデアがありますか? –

+0

.htaccessがアクティブになっていますか? – akond

+0

「アクティブ」とはなんですか?それがアクティブであるかどうかを確認し、そうでない場合は変更できますか? –

2

どのようにこのことについて:これは/api/controller.php?q=user/5/api/user/5のような要求をリダイレクトします

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ controller.php?q=$1 [L,QSA] 

。 '' QSA ''は既に存在するクエリ文字列変数も保持します。

+0

彼はapi/*で始まるURLだけを要求しています。あなたはそれらをすべて持っている。 – akond

+0

@akond、彼は自分の.htaccessファイルがすでにapiディレクトリにあると言っていたので、そのディレクトリ(およびサブディレクトリ)に対してのみ有効です。 – Brian

+0

これは何も解決しません。彼は既に '$ _SERVER ['REQUEST_URI']'を通して要求されたパスにアクセスできます。そして、逆参照を免れる必要があります。もちろん、OPは問題が実際に何であるかについて何も言わない。 – Artefacto

0

Apacheが.htaccessファイルをまったく読み取っていないことは明らかです。 Woogaを非指示文に入れて、500エラーが発生するかどうか確認してください。

また、他に選択肢がない限り、mod_rewriteには.htaccessファイルを使用しないでください。

UPDATE 1

[OK]を、ので、あなたの.htaccessファイルが読み込まれています。次のステップは、より簡単なルールを試すことです。次のようなものがあります:

これが機能すれば、mod_rewriteが動作していることがわかります。問題はルール内の一致にあります。

UPDATE 2

だから、mod_rewriteのは、あなたのルールがマッチングされないことを意味し、取り組んでいます。ルールをそのまま残して、条件を削除してみてください。それはループが発生した場合

RewriteEngine On 
RewriteRule . controller.php 

、このように変更します。

RewriteEngine On 
RewriteRule !controller.php controller.php 
+0

私はそれを試して、私は500エラーがあります。別の考えがありますか? –

+0

@Sharon update 1を参照してください。 – noodl

+0

また、アクセスしようとしているURLを教えてください。 – noodl