PHP Rest API,重定向POST路由器

时间:2015-03-31 20:08:34

标签: php regex apache .htaccess rest

我正在尝试编写一个简单的RESTful php应用程序。我正在尝试编写一个index.php路由器。

我目前拥有的.htaccess文件是

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule api/^(.*)$ api/index.php?_url=/$1 [QSA,L]
</IfModule>

我添加了RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$来强制显示尾随斜杠,如here所示。

调用var_dump($_POST);var_dump($_GET);仍然返回一个空数组,POST值仍然被删除。发送GET和POST都会在评估时返回GET:$_SERVER['REQUEST_METHOD'];

如何正确实现?此外,我不能使用库,必须实现自己的路由器。

任何帮助或建议表示赞赏。


  

编辑:


从头开始:

请求的网址应为http://localhost/api/*

位于api文件夹中的当前.htaccess文件如下所示:

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

其中controller.php位于/var/www/api

/etc/apache2/sites-available

中的虚拟文件

标题为 api.conf

看起来像这样:

<VirtualHost *:*>
    ServerName test.example.com
    ServerAlias www.test.example.com
    DocumentRoot /var/www/api/
    <Directory "/var/www/api/">
        Allow from all
        AllowOverride all
        Options +Indexes
    </Directory>
</VirtualHost>

仍有同样的问题:

The requested URL /api/something was not found on this server.

1 个答案:

答案 0 :(得分:0)

我解决了这个问题:

当我执行我忽略的更新时,Apache覆盖了sites-available文件夹中的default.conf文件...

我需要添加到000-default.conf

<Directory /var/www/>
     AllowOverride All

我发现mod_rewrite现已关闭:

in_array('mod_rewrite', apache_get_modules());
//or
var_dump(apache_get_modules());

所以重新启用:

a2enmod rewrite

service apache2 restart

希望这有助于其他人。