我正在为我的网络服务编写RESTful API
我想以下模式的所有调用触发一个位于/myserver/api/controller.php的php文件
模式是:
HTTP:/www.mydomain.com/api/user
HTTP:/www.mydomain.com/api/resource
基本上,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 :(得分: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”还将保留已存在的任何查询字符串变量。
答案 1 :(得分: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 :(得分:0)
目前尚不清楚Apache是否正在阅读你的.htaccess文件。尝试将Wooga
非指令放在那里,看看是否收到500错误。
此外,除非您别无选择,否则不要将.htaccess文件用于mod_rewrite(或其他任何内容)。
更新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