2016-11-17 50 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樣式文件中這樣的規則。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器,往往沒有。它們僅適用於您需要以原始方式編寫自己的重寫規則(這是一個明顯的安全噩夢)的情況。而不是可以控制主機配置(讀取:真正便宜的託管提供程序)或應用程序。