2016-11-17 77 views
1

后,我做在PHP有点REST API,但我想重写URL与的.htaccess重写API网址中删除.PHP

我试图重写URL这样

localhost/api/object_attributes/1/1 

localhost/api/object/1/attributes/1 

在我的.htaccess我已经做了一个条件,除去.php但第二个不工作。

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    RewriteEngine On 

    RewriteRule ^api/ api.php 
    RewriteRule ^api/object/1/attributes/1 /object_attributes/1/1 
</IfModule> 

我在网上搜索,但没有找到任何解决方案,我没有得到任何错误/重定向。

+0

第二条重写规则应该有什么意义?在http服务器中没有找到在该路径下找到的对象。 – arkascha

+0

这只是为了让API的URL更简单,更易于阅读/ object_attributes/1/1 –

+0

当然,我们理解这一部分。但这并不意味着这样的对象存在于你的http服务器的文件系统树中。您仍然必须将其重写为您创建的php脚本。 – arkascha

回答

0

你正在处理的第二条重写规则在我眼中并不合理。在http服务器中没有找到在该路径下找到的对象。

我假设您正在寻找以下两种方法之一。哪一个从你的描述中不清楚,术语“我想从......改写......”是不明确的。

RewriteEngine On 
RewriteRule ^/?api/object/(\d+)/attributes/(\d+) /api.php?object=$1&attributes=$2 [END,QSA] 

RewriteEngine On 
RewriteRule ^/?api/object_attributes/(\d+)/(\d+) /api.php?object=$1&attributes=$2 [END,QSA] 

一般提示:你应该总是喜欢将真正的HTTP服务器主机配置,而不是使用.htaccess样式文件中这样的规则。这些文件出了名的错误,很难调试,他们真的放慢了服务器,往往没有。它们仅适用于您需要以原始方式编写自己的重写规则(这是一个明显的安全噩梦)的情况。而不是可以控制主机配置(读取:真正便宜的托管提供程序)或应用程序。