Rewriting feed URLs

Fremantle

· MediaWiki · Wikimedia · RSS · indieweb ·

I've finally got my RSS feeds back up and running. The issue ended up being the fact that I'm running my wikis in the site root directory, i.e. without the /wiki/ in the URL like Wikimedia sites have. I've never liked the redundancy of it, and especially with .wiki domains it looks a bit silly (e.g. freo.wiki/wiki/…).

I thought for ages that it was because of the precedence of RewriteRules within Directory sections vs those within VirtualHost sections, but that was a red goose chase. It was actually that MediaWiki prioritises the title it finds in PATH_INFO over one supplied in the query string, so /Foo?title=Bar is seen as having a title of Foo instead of Bar.

To fix it, I turned off $wgUsePathInfo, set the $wgArticlePath to include the full domain name (bad, perhaps; this might come back to bite me), and then appended the path info as ?title= in a rewrite rule. So the Apache config looks like this:

<Directory "/var/www/mediawiki">
	RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
	RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
	RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php?title=$1 [L,QSA,B]
</Directory>
<VirtualHost *:443>
	DocumentRoot /var/www/mediawiki
	RewriteRule ^/news.rss /index.php?title=Special:CargoExport&table=posts&… [NC,QSA]
</VirtualHost>

And the MediaWiki config like this:

$wgScriptPath = '';
$wgArticlePath = 'https://' . $_SERVER['SERVER_NAME'] . '/$1';
$wgUsePathInfo = false;