So for nginx it is not straightforward to setup PHP-FPM so that PATH_INFO is correctly populated. Lamb uses the following /index.php/some/other type routing, where /some/other should be the PATH_INFO. Instead I want to make setup for a variety of web-servers straightforward, so I've switched to the more robust REQUEST_URI. This simplifies nginx configuration and Caddy and the PHP built-in web-server are compatible.
REQUEST_URI contains everything after the domain name, including the query string, so that needs to be removed:
$request_uri = '/home';
if ( $_SERVER['REQUEST_URI'] !== '/' ) {
$request_uri = strtok( $_SERVER['REQUEST_URI'], '?' );
}
We can see that for a request for the root of the site, REQUEST_URI returns / whereas PATH_INFO would be empty, so the code above takes that into account. We can then deduct a router action as follows:
$action = strtok( $request_uri, '/' );
Once the $action is known, it can be checked against an allowed list of actions:
switch ( $action ) {
case 'edit':
...
break;
default:
respond_404();
break;