天箭座X / 白鲸路由
简单的URL路由库。
Requires
- php: >=7.0
- sagittariusx/beluga.core: ^0.1.0
- sagittariusx/beluga.dynamic-properties: ^0.1.0
This package is not auto-updated.
Last update: 2024-09-15 01:05:32 UTC
README
简单的URL路由库。
安装
通过composer安装它!
composer require sagittariusx/beluga.routing
或者在你的composer.json文件中包含它
{ "require": { "php": ">=7.0", "sagittariusx/beluga.": "^0.1.1" } }
准备网络服务器
为了使用路由器,你需要告诉网络服务器将请求重写到不存在的URL路径到处理PHP脚本。
你可以通过两种不同的方式完成
- 将不存在的URL路径作为具有特定名称的
GET
变量传递给脚本 - 通过
$_SERVER[ 'REQUEST_URI' ]
(最佳选择)传递不存在的URL路径
Apache网络服务器
对于Apache来说,处理重写非常简单。
创建一个名为.htaccess
的文件,并将其放置在需要重写的地方的文件夹中。
但记住!
.htaccess
(分布式配置文件)仅应在没有访问服务器配置文件的情况下使用。
.htaccess
的使用会带来一些开销,这些开销是可以避免的。
但是,如果你承认一个服务器,就没有必要再展示了。你知道的 :-)
此文件的内容取决于应使用的路由器类型。
作为GET变量(RouterType::REWRITE_TO_GET)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?theURL=$1 [QSA,L]
第一行启用重写引擎。第二行声明匹配所有不存在的文件调用条件,第三行匹配所有不存在的目录调用。
最后一行将匹配的不存在的文件和目录重写到index.php
,并将调用的不存在的URL路径传递给theURL
GET变量
作为'REQUEST_URI'值(RouterType::REWRITE_TO_REQUEST_URI)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
第一行启用重写引擎。第二行声明匹配所有不存在的文件调用条件,第三行匹配所有不存在的目录调用。
最后一行将匹配的不存在的文件和目录重写到index.php
,并将调用的不存在的URL路径传递给$_SERVER[ 'REQUEST_URI' ]
错误处理
如果.htaccess
的使用触发了某些服务器错误(例如,错误50*或其他),你必须检查
- 是否启用了Apache使用
.htaccess
文件 - 是否启用了Apache通过
.htaccess
文件进行重写(.htaccess
内容的权限) - 是否启用了Apache使用
mod_rewrite
扩展
前两项可以通过确保允许覆盖指令来处理。有关详细信息,请参阅:Apache HTTP服务器教程:.htaccess文件
AllowOverride FileInfo
要检查是否已启用mod rewrite,请在您的控制台中调用此命令
sudo a2enmod rewrite
如果已经启用,它将输出:Module rewrite already enabled
如果没有启用,则启用重写模块。
如果您无法在服务器上调用控制台,请联系管理员或提供商,询问他们是否为您启用了mod rewrite。如果没有,请他们通过.htaccess
启用mod rewrite的使用
NGINX网络服务器
这是一个大型的待办事项!:-)
但是,如果您使用
try_files $uri $uri/ /index.php?$args;
…它应该可以通过$_SERVER[ 'REQUEST_URI' ]
在index.php
内部获取调用的URL路径
使用方法
// Include the autoloader, created by composer require __DIR__ . '/vendor/autoload.php'; use Beluga\Routing\Router; use Beluga\Routing\RouterType; // Init the router $router = new Router( // The type of the router RouterType::REWRITE_TO_REQUEST_URI ); // Adds an dynamic regex URI path route $router->addRoute( '~^/foo/(\d+)/bar/?$~', function ( array $matches ) { // If you need access to current Router instance can get it by Router::GetInstance() echo 'ID: ', $matches[ 1 ], ' OK :-)'; exit; } ); // Adds an static URI path route $router->addRoute( '~^/baz/?$~', function () { // If you need access to current Router instance can get it by Router::GetInstance() echo 'The BAZ is called!'; exit; } );
在定义您的路由后,只需调用execute()即可执行路由。
if ( ! $router->execute() ) { // Showing 404 error because no router matches the defined request URI path. }