我正在尝试编写一个简单的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.
答案 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
希望这有助于其他人。