我目前正在努力用php创建api点。我跟着http://coreymaynard.com/blog/creating-a-restful-api-with-php/教程,除了modrewrite部分之外,一切都正常。我在.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/v1/(.*)$ api.php?request=$1 [QSA,NC,L]
</IfModule>
使用此规则,如果没有名为api/v1
的文件或目录,则接受部分的其余部分并将其重写为api.php
。
所以,如果我有localhost/api/v1/example?apiKey=w36fOc4vu6
,那么我应该正常$_REQUEST['request'] == 'example'
和$_GET
。
当我在api.php
中回显它时,我得到$_GET
值而不是$_REQUEST['request']
(这是nil)。我在配置中遗漏了什么吗?
我已经检查过启用了mod_rewrite。谷歌搜索很多,无法找到任何解释为什么会发生这种情况。对于一个PHP菜鸟,任何帮助将不胜感激。 :)
EDIT1:添加了我正在关注的教程的链接。
Edit2:仅在.htaccess使用RewriteRule api/v1/(.*)$ api.php?request=$1 [QSA,NC,L]
,print_r()
获取并请求两者。
对于$_REQUEST
Array ( [apiKey] => w36fOc4vu6 )
对于$_GET
,获取
Array ( [apiKey] => w36fOc4vu6 )
但我仍然从键/值(实际问题)中遗漏example
。
编辑3: $_SERVER
[REQUEST_URI] => /api/v1/example?apiKey=w36fOc4vu6
[SCRIPT_NAME] => /api.php
[PATH_INFO] => /v1/example
[PATH_TRANSLATED] => /var/www/v1/example
更新: @mario和@Eiad都是对的。问题是Multiviews正在进行中。在关闭它的过程中,我发现我在默认配置中有AllowOverride none
。所以,我的.htaccess根本就没有读过。非常感谢你。问题解决了。
答案 0 :(得分:0)
尝试添加
RewriteBase /
并更新
RewriteRule ^api/v1/(.*?)$ /api.php?%{QUERY_STRING}&request=$1 [L,NC,NS]