php中的Mod_rewrite没有设置请求值

时间:2015-05-31 15:37:58

标签: php apache .htaccess mod-rewrite

我目前正在努力用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根本就没有读过。非常感谢你。问题解决了。

1 个答案:

答案 0 :(得分:0)

尝试添加

RewriteBase /

并更新

RewriteRule ^api/v1/(.*?)$ /api.php?%{QUERY_STRING}&request=$1 [L,NC,NS]