Basic routing using REQUEST_URI
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;
March 21, 2023 at 12:41 pm