diff --git a/src/Core/Router/RouteLoader.php b/src/Core/Router/RouteLoader.php index 563811ee97..0eba7a9f10 100644 --- a/src/Core/Router/RouteLoader.php +++ b/src/Core/Router/RouteLoader.php @@ -96,7 +96,7 @@ class RouteLoader extends Loader * @param mixed $target Some kind of callable, typically class with `__invoke` or [object, method] * @param null|array $param_reqs Array of {param} => regex * @param null|array $options Possible keys are ['condition', 'defaults', 'format', - * 'fragment', 'http-methods', 'locale', 'methods', 'schemes', 'accept'] + * 'fragment', 'http-methods', 'locale', 'methods', 'schemes', 'accept', 'is_system_path'] * 'http-methods' and 'methods' are aliases */ public function connect(string $id, string $uri_path, $target, ?array $options = [], ?array $param_reqs = []) @@ -109,12 +109,13 @@ class RouteLoader extends Loader // and special configuration options defaults: array_merge( [ - '_controller' => is_array($target) ? $target : [$target, '__invoke'], - '_format' => $options['format'] ?? 'html', - '_fragment' => $options['fragment'] ?? '', - '_locale' => $options['locale'] ?? 'en', - 'template' => $options['template'] ?? '', - 'accept' => $options['accept'] ?? [], + '_controller' => is_array($target) ? $target : [$target, '__invoke'], + '_format' => $options['format'] ?? 'html', + '_fragment' => $options['fragment'] ?? '', + '_locale' => $options['locale'] ?? 'en', + 'template' => $options['template'] ?? '', + 'accept' => $options['accept'] ?? [], + 'is_system_path' => $options['is_system_path'] ?? true, ], $options['defaults'] ?? [] ), diff --git a/src/Routes/GSActor.php b/src/Routes/GSActor.php index 3474b38a91..70690479d8 100644 --- a/src/Routes/GSActor.php +++ b/src/Routes/GSActor.php @@ -43,6 +43,6 @@ abstract class GSActor public static function load(RouteLoader $r): void { $r->connect(id: 'gsactor_view_id', uri_path: '/actor/{id<\d+>}', target: [C\GSActor::class, 'GSActorShowId']); - $r->connect(id: 'gsactor_view_nickname', uri_path: '/{nickname<' . Nickname::DISPLAY_FMT . '>}', target: [C\GSActor::class, 'GSActorShowNickname']); + $r->connect(id: 'gsactor_view_nickname', uri_path: '/{nickname<' . Nickname::DISPLAY_FMT . '>}', target: [C\GSActor::class, 'GSActorShowNickname'], options: ['is_system_path' => false]); } } diff --git a/src/Util/Common.php b/src/Util/Common.php index dff3e48ebc..6b89580297 100644 --- a/src/Util/Common.php +++ b/src/Util/Common.php @@ -154,8 +154,8 @@ abstract class Common public static function isSystemPath(string $str): bool { try { - Router::match('/' . $str); - return true; + $route = Router::match('/' . $str); + return $route['is_system_path'] ?? true; } catch (ResourceNotFoundException $e) { return false; }