Requests for comment/Entrypoint Routing and 404 handling

From MediaWiki.org
Jump to: navigation, search

Entrypoint Routing [edit]

Right now all of our file entrypoints are isolated. /api.php always does the api, /index.php always does page views, /thumb.php always does thumbnails, /img_auth.php always does private image.

To create a short path for any of these any rewrite you make MUST ensure to point to the correct php file. You cannot simply forward anything that looks like a special path to index.php and have it decide what entrypoint was intended based on the path that was accessed and the wiki's config.

The proposal here is to convert each of these php file entrypoints into something that simply forwards to index.php. Our /api.php will simply require index.php, perhaps also set some sort of constant like MW_ENTRYPOINT_PATH for those on webservers that don't like to pass good _SERVER data. Then our WebRequest will determine what the entrypoint is and from that index.php will run a relevant entrypoint handler. That is, something that executes the api when the REQUEST_URI was /api.php, and runs the normal path handling on paths like /wiki/, etc...

Adding this will allow extensions to define new entrypoints as well. For example a ForumExt extension could define a /extensions/ForumExt/forum.php entrypoint that would simply forward to index.php, this would serve as a fallback for those on servers that can't handle short urls. For those who CAN setup short urls, they can simply include something like /forum/ within the standard set of shorturl paths they send to index.php. And with a little bit of configuration all /forum/ paths will go to ForumExt's entrypoint instead of to the normal entrypoint.

The problem with this example in our current situation for the author of ForumExt and users installing it is that /extensions/ForumExt/forum.php and index.php are two completely different entrypoints. If /forum/ were to be added as a short url then the short url rules would have to special case /forum/ and make sure it gets sent to /extensions/ForumExt/forum.php instead of letting /index.php route everything where it belongs. Depending on the webserver setup the difference in configuration needed to send everything to /index.php and just some paths to a separate .php file can be slightly different, or a whole pile of extra server configuration that shouldn't be necessary.

404 Handling [edit]

Right now if you forward something like /asdf to /index.php our path routing code will not recognize it and will redirect to the wiki's main page. This proposal is to add a 404 special page to MediaWiki.

The special page may function like Extension:Special404 does giving hints like suggesting /wiki/Foo page when a user goes to /foo. Because this will be a part of core this shouldn't need any extra configuration besides an error document setting. MediaWiki's path routing code will detect paths like / and /wiki specifically and treat them as basic paths that should be redirected to the Main Page. While other paths like /asdf will be treated as 404 errors and the 404 special page will be run.

Entrypoint + 404 handling [edit]

As a result of both of these features being added, we can add native 404 thumbnail handling to MediaWiki. If one sets /index.php to their webserver's error document MediaWiki's path routing code will take this as a 404 and display an error page. However if it instead matches what looks to be a thumb url, we can automatically (without any extra configuration or very verbose rewrite rules) extract the info we want from the path and set thumb.php as the entrypoint. At that point even though the request went to /index.php we can treat it as a thumbnail handler url.