( ( !isset($this->GET['title']) || $title->getPrefixedDBKey() != $this->GET['title'] ) ||
// No valid variant in URL (if the main-language has multi-variants), to ensure
// the Accept-Language would only be added to XVO when a 301 redirection happened
- ( !isset($this->GET['variant']) && $perferred != $wgContLang->getCode() &&
- $wgContLang->hasVariants() && !$wgUser->isLoggedIn() ) ) &&
+ ( !isset($this->GET['variant']) && $wgContLang->hasVariants() && !$wgUser->isLoggedIn() ) ) &&
!count( array_diff( array_keys( $this->GET ), array( 'action', 'title' ) ) ) )
{
- $targetUrl = $title->getFullURL();
+ $pref = $wgContLang->getPreferredVariant( $fromUser = false, $fromHeader = true );
+ $targetUrl = $title->getFullURL( $variant = $pref );
// Redirect to canonical url, make it a 301 to allow caching
if( $targetUrl == $request->getFullRequestURL() ) {
$message = "Redirect loop detected!\n\n" .
}
- function getPreferredVariant( $fromUser = true ) {
- return $this->mConverter->getPreferredVariant( $fromUser );
+ function getPreferredVariant( $fromUser = true, $fromHeader = false ) {
+ return $this->mConverter->getPreferredVariant( $fromUser, $fromHeader );
}
/**
/**
* get preferred language variants.
* @param boolean $fromUser Get it from $wgUser's preferences
+ * @param boolean $fromHeader Get it from Accept-Language
* @return string the preferred language code
* @public
*/
- function getPreferredVariant( $fromUser = true ) {
+ function getPreferredVariant( $fromUser = true, $fromHeader = false ) {
global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant, $wgOut;
if($this->mPreferredVariant)
// http header, but we don't set the mPreferredVariant
// variable in case this is called before the user's
// preference is loaded
- if( array_key_exists( 'HTTP_ACCEPT_LANGUAGE', $_SERVER ) ) {
+ if( $fromHeader && array_key_exists( 'HTTP_ACCEPT_LANGUAGE', $_SERVER ) ) {
// bug 21672: Add Accept-Language to Vary and XVO headers
// to help Squid to determine user's perferred local language