前言廢話
在早期的時候,我曾經寫過一篇文章,是關於 Nginx 如何隱藏副檔名,其實一部分就是希望類似做到路由器的作用。
但隨著需求越來越高,偶然在網路上看到這個適用於 PHP 使用的路由器,這篇就來介紹他吧!
關於 PHP Router
我主要是在這個 Github 上看到的,https://github.com/phprouter/main。
它的組成不複雜,基本上只要將 router.php
及 routes.php
放入目錄內即可。而關於網站的內容,建議可以置放於 views 裡(雖然沒有硬性規定)。
置放完後,編輯 routes.php
後,並將 Apache 用的 .htaccess
同樣置於目錄即可。若你是使用 Nginx 也沒關係,下方會給 config,繼續看下去就對了!
編輯 routes.php
其實 routes.php
檔案裡有非常詳細的解說,所以我這裡就將大部分會用到的帶過就好。
在網站的世界裡,通常會使用 GET
、POST
、PUT
、PATCH
及 DELETE
幾種方式來要求資料,而這個 PHP Router 可以在 routes.php
限制頁面的要求方式。
最基礎的要求方式如下:
get('/', 'views/index.php');
這行 Code 就是指:當有人使用 GET
方式訪問 /
目錄時,就要使用 views/index.php
的這個檔案。
因此,你可以將 get()
改成 post()
、put()
、patch()
、delete()
等方法。
若你的檔案同時接受很多種要求方式,你也可以使用 any()
來接受任何要求。
Nginx 設定方式
對於 Apache 使用者而言,在他的 Github 有 .htaccess
檔案,放到目錄裡即可。
但像是我,是使用 Nginx 派的,官方並沒有提供相關設定檔。因此,我整理出了一份,請將 /etc/nginx/sites-enabled/
裡的內容更新即可。
server {
listen 80;
root /var/www/html;
index routes.php;
charset utf-8;
server_name test.example.com;
location / {
try_files $uri $uri/ /routes.php?$query_string;
}
error_page 404 /routes.php;
location routes.php {
}
location ~ \.php {
return 404;
}
location ~ (\.png|\.jpg|\.gif|\.jpeg|\.zip|\.css|\.svg|\.js)$ {}
location = /routes.php {
try_files $uri /routes.php?$query_string;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index routes.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
結語
這篇 Github 又拯救了我的一天。(#