2011-01-20 80 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