Hi all,

I am running MediaWiki 1.26, and trying to force it to be all-SSL, all the 
time, excepting a particular Special: page. To that end, I have code which 
makes the following method call from a 'BeforeInitialize' hook:

$this->output->redirect($https_url, 301);

However, by the time processing gets to OutputPage:output() method, the 
OutputPage::$mRedirect attribute is empty. I think this is because our wiki is 
also configured to require logins to read, and when accessing it as anonymous 
user on plaintext port, OutputPage::prepareErrorPage gets run AFTER we send the 
SSL redirect, but BEFORE the actual output rendering occurs.

My simple solution to this is to forcibly invoke OutputPage::Output on the 
spot, right there in the 'BeforeInitialize' hook:

$this->output->redirect($https_url, 301);
$this->output->output();

However, while it LOOKS safe (because OutputPage::output does a return after 
setting redirects, rather than continue on to process output), I still have a 
bad feeling about this.  I don't like messing with order-of-execution in such a 
crude manner.

Can anyone either confirm that it's safe, or offer a superior alternative - a 
way of forcing a redirect safely, even if an ErrorPage would be rendered 
otherwise?

I know that I can use PHP's 'header' method directly, but that also skips 
MediaWiki housekeeping, so I don't particularly like that route either.

Thanks in advance!

_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to