2011-01-20 77 views
1

我正在为我的Web服务编写一个RESTful API。
我想以下模式的所有呼叫触发的是,位于/myserver/api/controller.php 模式的PHP文件是:
HTTP:/www.mydomain.com/api/user
HTTP:/www.mydomain.com/api/resourceRewriteCond 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 

更新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 2011-01-20 19:41:46

+0

这将无法正常工作......例如,它显示404为www.mydomain.com/api/user/123。 – 2011-01-20 19:47:28

+0

也许你在httpd.conf中有AllowOverride None?用RewriteLog和RewriteLogLevel打开日志,看看发生了什么。 – Artefacto 2011-01-20 20:00:41

回答

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] 
2

如何:

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

这将重定向像/api/user/5/api/controller.php?q=user/5的请求。 ''QSA''也将保留任何已经存在的查询字符串变量。

0

目前尚不清楚Apache甚至可以读取您的.htaccess文件。尝试将Wooga非指令放在那里,看看你是否得到500错误。

另外,除非没有别的选择,否则不要使用mod_rewrite的.htaccess文件(或其他任何东西)。

更新1

好了,你的.htaccess文件被读出。下一步是尝试一个更简单的规则。就像:

RewriteEngine On 
RewriteRule^http://httpd.apache.org/ 

如果这样的话,那么你知道mod_rewrite正在运行,并且问题在于你的规则中的匹配。

更新2

所以mod_rewrite的工作,这意味着你的规则不匹配。尝试删除条件,但保持原样。

RewriteEngine On 
RewriteRule . controller.php 

如果导致一个循环,它改成这样:

RewriteEngine On 
RewriteRule !controller.php controller.php