簡體   English   中英

以正確的方式使用 PHP 路由頁面請求

[英]Routing page requests with PHP the right way

我需要知道“正確”執行站點導航的術語和最佳實踐嗎? 方式,類似於當您通過 url 提問時 stackoverflow 如何路由您:

“http://stackoverflow.com/questions/ask”

就我的 PHP 編程知識而言,我可能會像這樣編寫代碼:

“http://stackoverflow.com/index.php?p=questions&act=ask”

希望你明白我的意思。 我想知道這種頁面導航和請求/響應處理方法的術語,以及在使用這種標准/方法設計 Web 應用程序時我需要記住的最佳實踐、限制或其他任何內容。 我什至不知道這一切是否都是用 PHP 或一些用 ASP 或 Ruby 編碼的 Web 后端完成的,或者你有什么,所以我用我的猜測填充了標簽。

大多數 MVC 框架使用的模式是調用路由器的前端控制器 前端控制器通常是您的 Web 根目錄中的index.php 接下來,所有不針對現有文件(如 js、css 和圖像資產)的請求都需要發送到此控制器。 在 apache 中,您可以使用mod_rewrite執行此操作:

RewriteRule ^index\.php$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L,QSA]

但是,Apache 2.5 中推薦的方法是使用FallbackResource

FallbackResource index.php

如果您使用的是IIS,它具有類似的功能

index.php中,您可以訪問最初使用$_SERVER['REQUEST_URI']請求的 URL。 您應該包括您的路由器(它應該在 Web 根目錄之外)並使用請求 URI 調用它。 例子:

require '../router.php';

$router = new Router();
$router->process($_SERVER['HTTP_METHOD'], $_SERVER['REQUEST_URI'], $_GET, $_POST);

然后你的路由器可以找到合適的控制器來路由請求。 閱讀有關MVC 框架的更多信息,並研究一些示例以更好地了解其他人是如何實現它的。

他們很可能使用您在 URL 中描述的相同方法(嵌入導航變量),但它是在“幕后”完成的。

允許您呈現此類 URL 的機制稱為 MOD 重寫。 它使用 URL 中的變量和正則表達式的組合,以更加用戶友好的方式向最終用戶重新表示 URL。

更多信息: http ://httpd.apache.org/docs/current/mod/mod_rewrite.html

編輯:當然這適用於在 apache 網絡服務器上運行的代碼。 其他 Web 服務器(例如 IIS)可能也有類似的模塊。

另外,請注意 mod_rewrite 超出了 php.ini 的范圍。 相反,它實際上是 apache 服務器指令,甚至在 php 發揮作用之前就被調用。

我目前正在開發一個針對極高性能的 php 路由器。 你可能想看看:

https://github.com/c9s/Pux

Pux 在靜態路由調度方面比 symfony 路由器快 48.5 倍,在正則表達式調度方面快 31 倍。 (安裝了 pux 擴展)

Pux 盡量不消耗計算時間來動態構建所有路由(如 Symfony/Routing)。 相反,Pux 將您的路由編譯為普通的 PHP 數組進行緩存,編譯后的路由可以非常快速地從緩存中加載。

借助 Pux PHP 擴展支持,您可以比純 PHP Pux 快 1.5~2 倍地加載和調度路由。

RouteREST 介紹https://github.com/iPhoneSDKPro/routeREST這是我實現的一個 php 路由器。 它使用 MVC 架構,旨在易於設置和使用。 我在我開發並想與社區分享的項目中使用它。 在某些時候,我想把它變成一個“作曲家”圖書館..有一天..享受-詹姆斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM