使用我試圖在 PHP 中創建的 API,我目前在 .htaccess 檔案中為 API 的根目錄設定了這些重寫規則:
# Remove the php extension from the filename
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.] )$ $1.php [NC,L]
這是為了使對 API 的請求看起來更“RESTful”——而不是api/entity.php?id=5它api/entity?id=5——我想更進一步,并允許請求 URLapi/entity/5成功地重寫為api/entity.php/5或api/entity.php?id=5。
我正在試驗這樣的 apache 重寫規則,它有正則運算式來檢測像這樣的路徑 entity/{any number here}
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.] )$ $1.php [NC]
RewriteRule ^(. )(\/\d )$ $1.php$2 [NC,L]
它將entity/5在兩個捕獲中與entity和匹配,/5然后在內部將其定向到entity.php/5- 在 php 檔案中的那個點,我可以對請求 URI 或類似的東西進行爆炸,以從路徑中獲取值。
但是我真的不太了解 apache 重寫來完全實作這一點,因為無論出于何種原因,這條規則都不起作用。我知道我可以為每個目錄撰寫硬編碼的重寫規則,我想這樣做,但我真的寧愿保持這種通用性。
如果沒有真正的方法來實作我想要的東西,那么我寧愿堅持這樣的路徑,而api/entity?id=5不是需要撰寫一大堆重寫規則。
我也在想,如果有一種方法可以檢測請求何時與目錄不匹配(默認情況下會發生類似路徑的情況api/entity/5?) - 在這種情況下它運行不同的重寫 - 不運行第一個并使其嘗試撰寫現在內部指向的 URL,但同樣,我不確定如何實作這一點。
有更多經驗的人可以指出我正確的方向嗎?
uj5u.com熱心網友回復:
正如Chris Hass強調的那樣,在這種情況下,實作一些變體的 PHP 路由器可能更有意義,而且更容易。
以下是我為將來偶然發現此問題的任何人找到的一些示例的鏈接:
https://medium.com/the-andela-way/how-to-build-a-basic-server-side-routing-system-in-php-e52e613cf241
https://www.taniarascia.com/the-simplest-php-router/
https://www.education.io/edpresso/how-to-create-a-basic-php-router
顯然,如果您不像我那樣故意只使用 PHP,那么您沒有理由不使用庫或使用 Laravel 等來使您的生活更輕松,畢竟為什么要重新發明輪子?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358465.html
