Easy, simple and elegant way to add http rewrite rule with psr/http-message
.
name | comment |
---|---|
matchPath | match path prefix or exact path |
matchHost | match request header Host |
regMatchPath | use regexp match path |
regMatchHost | use regexp match host |
matchMethod | match request method,not allowed to be used alone |
$request = (new UrlRewrite([
UrlRewriteRule::matchPath('/enter')->rewriteTo('/rewrite'),
]))->rewrite($request);
- match:
/enter
=>/rewrite
- match:
/enter/foo
=>/rewrite/foo
- match:
/enter1/foo
=>/rewrite1/foo
- nomatch:
/nomatch/foo
=>/nomatch/foo
$request = (new UrlRewrite([
UrlRewriteRule::matchPath('/enter', true)->rewriteTo('/rewrite'),
]))->rewrite($request);
- match:
/enter
=>/rewrite
- nomatch:
/enter/foo
=>/enter/foo
$request = (new UrlRewrite([
UrlRewriteRule::matchHost('example.com')->rewriteTo('/rewrite'),
]))->rewrite($request);
- match:
example.com/enter
=>example.com/rewrite
- match:
example.com/enter/foo
=>example.com/rewrite
- nomatch
sub.example.com/enter/foo
=>sub.example.com/enter/foo
$request = (new UrlRewrite([
UrlRewriteRule::regMatchHost('{subdomain:[a-z]+}.example.com')
->regMatchPath('/user/{id:\d+}')
->rewriteTo('/rewrite/{subdomain}/{id}'),
]))->rewrite($request);
- match:
sub.example.com/user/1
=>sub.example.com/rewrite/sub/1
- match:
sub2.example.com/user/2
=>sub.example.com/rewrite/sub2/2
- nomatch:
example.com/enter/foo
=>example.com/enter/foo
- nomatch:
sub.example.com/user/foo
=>sub.example.com/user/foo
Obtain through the request header X-Real-Path
, just rewriteTo
, no rewriteToFn
- Require package and publish config
composer require lazychanger/urlrewrite
php ./bin/hyperf vendor:publish lazychanger/urlrewrite
- Replace CoreMiddleware in
config/autoload/dependencies.php
or add the code to your CoreMiddleware
// add config/autoload/dependencies.php config
use Hyperf\HttpServer\Contract\CoreMiddlewareInterface;
use LazyChanger\UrlRewrite\Middleware\CoreMiddleware;
return [
CoreMiddlewareInterface::class => CoreMiddleware::class
];
// or add UrlRewrite code in app/Middleware/CoreMiddleware.php
class CoreMiddleware extends HyperfCoreMiddleware
{
protected UrlRewrite $rewrite;
public function __construct(ContainerInterface $container, string $serverName)
{
parent::__construct($container, $serverName);
// add UrlRewrite object
$this->rewrite = $this->container->get(UrlRewrite::class);
}
public function dispatch(ServerRequestInterface $request): ServerRequestInterface
{
return parent::dispatch($this->rewrite->rewrite($request));
}
}
- Regexp Route Parse nikic/fast-route