Giuseppe Lavagetto has submitted this change and it was merged. Change subject: mediawiki: use sites-available everywhere. ......................................................................
mediawiki: use sites-available everywhere. Also, we add an updated header to the redirects.conf file and import the corresponding .dat file and the generator. This way redirects.conf can be generated from the .dat file and submitted for review. Change-Id: I42a07252bf6ed37231ecba587e8dfc018e5c6609 Signed-off-by: Giuseppe Lavagetto <glavage...@wikimedia.org> --- M manifests/role/mediawiki.pp M modules/mediawiki/files/apache/sites/redirects.conf A modules/mediawiki/files/apache/sites/redirects/redirects.dat A modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects M modules/mediawiki/manifests/web.pp M modules/mediawiki/templates/apache/apache2.conf.erb 6 files changed, 989 insertions(+), 20 deletions(-) Approvals: Giuseppe Lavagetto: Verified; Looks good to me, approved diff --git a/manifests/role/mediawiki.pp b/manifests/role/mediawiki.pp index 4d81d8c..2375b3f 100644 --- a/manifests/role/mediawiki.pp +++ b/manifests/role/mediawiki.pp @@ -21,11 +21,8 @@ include ::role::mediawiki::common include ::lvs::configuration - $mw_use_sites = $::hostname == 'mw1017' - class { '::mediawiki::web': workers_limit => $workers_limit, - use_sites_available => $mw_use_sites, } class { 'lvs::realserver': diff --git a/modules/mediawiki/files/apache/sites/redirects.conf b/modules/mediawiki/files/apache/sites/redirects.conf index 0ff466c..8662d1f 100644 --- a/modules/mediawiki/files/apache/sites/redirects.conf +++ b/modules/mediawiki/files/apache/sites/redirects.conf @@ -1,4 +1,5 @@ -# This file is generated by refreshDomainRedirects from the source file redirects.dat +# This file is generated by redirects/refreshDomainRedirects from the +# source file redirects.dat and managed on servers by Puppet # Do not edit it manually! <VirtualHost *> diff --git a/modules/mediawiki/files/apache/sites/redirects/redirects.dat b/modules/mediawiki/files/apache/sites/redirects/redirects.dat new file mode 100644 index 0000000..ef79f23 --- /dev/null +++ b/modules/mediawiki/files/apache/sites/redirects/redirects.dat @@ -0,0 +1,509 @@ +# domain-redirects.dat -- The oyster knife of URL manipulation +# vim: ft=conf ts=12 +# +# Each non-blank line consists of a rule with whitespace-separated +# parameters. The first parameter is the command name, which may be funnel, +# rewrite or override. +# +# funnel <domain-wildcard> <dest> +# +# Redirect a whole domain (or set of domains) to a single URL +# +# rewrite <domain-wildcard> <dest> +# +# Rewrite the URLs in one domain (or set of domains) to URLs in another +# domain with an optional path prefix. A trailing slash in <dest> is ignored. +# A leading slash is implied in the source path. +# +# override <domain-wildcard><path> <dest> +# +# Override a rewrite or funnel rule for a certain domain wildcard by sending +# a certain path to a specified destination URL. +# +# Where: +# <domain-wildcard> may take one of the following forms: +# +# <domain> -- A simple domain name +# *.<domain> -- Any subdomain of the given domain +# <domain>.*.<domain> -- A specified subdomain of any subdomain of the +# given domain +# *<domain> -- Matches *.<domain> or <domain>, i.e. the +# specified domain or any subdomain of it. +# +# <dest> is a fully-qualified or protocol-relative URL. If the URL is +# protocol-relative, the behaviour will depend on X-Forwarded-Proto. The +# path part of the URL is optional, "/" is implied if it is absent. +# +# If the special character "*" is present, it will be substituted with the +# subdomain part matched by a *.<domain> style domain wildcard. If "*" occurs +# in a rule where such a wildcard is not used, it will be interpreted as a +# literal "*". +# +# <path> is the path part of a URL. +# +# Double-redirects are not allowed -- the domain part of the destination may +# not be specified as a source elsewhere in the file. This prevents redirect +# loops and accidental listing of important domains such as en.wikipedia.org +# as a source. +# + +# Shop redirects +funnel shop.wiktionary.org //shop.wikimedia.org +funnel store.wiktionary.org //shop.wikimedia.org +funnel shop.wikiquote.org //shop.wikimedia.org +funnel store.wikiquote.org //shop.wikimedia.org +funnel shop.wikibooks.org //shop.wikimedia.org +funnel store.wikibooks.org //shop.wikimedia.org +funnel shop.wikinews.org //shop.wikimedia.org +funnel store.wikinews.org //shop.wikimedia.org +funnel shop.wikisource.org //shop.wikimedia.org +funnel store.wikisource.org //shop.wikimedia.org +funnel shop.wikiversity.org //shop.wikimedia.org +funnel store.wikiversity.org //shop.wikimedia.org +funnel shop.mediawiki.org //shop.wikimedia.org +funnel store.mediawiki.org //shop.wikimedia.org +funnel shop.wikimediafoundation.org //shop.wikimedia.org +funnel store.wikimediafoundation.org //shop.wikimedia.org +funnel shop.wikipedia.org //shop.wikimedia.org +funnel store.wikipedia.org //shop.wikimedia.org +funnel shop.wikipedia.com //shop.wikimedia.org +funnel store.wikipedia.com //shop.wikimedia.org + +# Donate wiki +rewrite donate.mediawiki.org https://donate.wikimedia.org +rewrite donate.wikibooks.org https://donate.wikimedia.org +rewrite donate.wikimediafoundation.org https://donate.wikimedia.org +rewrite donate.wikinews.org https://donate.wikimedia.org +rewrite donate.wikipedia.com https://donate.wikimedia.org +rewrite donate.wikiquote.org https://donate.wikimedia.org +rewrite donate.wikisource.org https://donate.wikimedia.org +rewrite donate.wikispecies.org https://donate.wikimedia.org +rewrite donate.wikiversity.org https://donate.wikimedia.org +rewrite donate.wiktionary.org https://donate.wikimedia.org + +funnel sep11.wikipedia.org http://wayback.archive.org/web/20030315000000*/http://sep11.wikipedia.org/wiki/In_Memoriam + +funnel *wikijunior.com //en.wikibooks.org/wiki/Wikijunior +funnel *wikijunior.org //en.wikibooks.org/wiki/Wikijunior +funnel *wikijunior.net //en.wikibooks.org/wiki/Wikijunior + +# Language aliases +rewrite be-x-old.wikisource.org //be.wikisource.org # Bug 41755 +rewrite de-beta.wikipedia.org //de.wikipedia.org +rewrite cz.wikipedia.org //cs.wikipedia.org +rewrite cz.wikipedia.com //cs.wikipedia.org +rewrite cz.wikibooks.org //cs.wikibooks.org +rewrite cz.wikibooks.com //cs.wikibooks.org +rewrite cz.wikiquote.org //cs.wikiquote.org +rewrite cz.wikiquote.com //cs.wikiquote.org +rewrite cz.wikisource.org //cs.wikisource.org +rewrite cz.wikisource.com //cs.wikisource.org +rewrite cz.wikiversity.org //cs.wikiversity.org +rewrite cz.wikiversity.com //cs.wikiversity.org +rewrite cz.wiktionary.org //cs.wiktionary.org +rewrite cz.wiktionary.com //cs.wiktionary.org +rewrite cz.wikinews.org //cs.wikinews.org +rewrite cz.wikinews.com //cs.wikinews.org +rewrite dk.wikipedia.org //da.wikipedia.org +rewrite dk.wikipedia.com //da.wikipedia.org +rewrite dk.wikibooks.org //da.wikibooks.org +rewrite dk.wikibooks.com //da.wikibooks.org +rewrite dk.wiktionary.org //da.wiktionary.org +rewrite dk.wiktionary.com //da.wiktionary.org +rewrite epo.wikipedia.org //eo.wikipedia.org +rewrite jp.wikipedia.org //ja.wikipedia.org +rewrite jp.wikipedia.com //ja.wikipedia.org +rewrite nb.wikipedia.org //no.wikipedia.org + +# renamed chapter wiki - bug 38763 +rewrite pa.us.wikimedia.org //pa-us.wikimedia.org + +# arbcom +rewrite arbcom.de.wikipedia.org https://arbcom-de.wikipedia.org +rewrite arbcom.en.wikipedia.org https://arbcom-en.wikipedia.org +rewrite arbcom.fi.wikipedia.org https://arbcom-fi.wikipedia.org +rewrite arbcom.nl.wikipedia.org https://arbcom-nl.wikipedia.org + +rewrite noboard.chapters.wikimedia.org //noboard-chapters.wikimedia.org + +rewrite wg.en.wikipedia.org //wg-en.wikipedia.org + +rewrite tp.wikipedia.org //tokipona.wikipedia.org + +rewrite zh-cfr.wikipedia.org //zh-min-nan.wikipedia.org +rewrite minnan.wikipedia.org //zh-min-nan.wikipedia.org +rewrite nan.wikipedia.org //zh-min-nan.wikipedia.org + +rewrite zh-cn.wikipedia.org //zh.wikipedia.org +rewrite zh-tw.wikipedia.org //zh.wikipedia.org + +# RT #4240 +funnel *wikiartpedia.biz //www.wikipedia.org +funnel *wikiartpedia.co //www.wikipedia.org +funnel *wikiartpedia.info //www.wikipedia.org +funnel *wikiartpedia.me //www.wikipedia.org +funnel *wikiartpedia.mobi //www.wikipedia.org +funnel *wikiartpedia.net //www.wikipedia.org +funnel *wikiartpedia.org //www.wikipedia.org + +# Redirect old URLs to en.wikibooks.org, to avoid breaking them +rewrite wikibooks.org //en.wikibooks.org +rewrite wikibooks.com //en.wikibooks.org +rewrite www.wikibooks.com //en.wikibooks.org + +rewrite wikibooks.de //de.wikibooks.org +rewrite www.wikibooks.de //de.wikibooks.org + +# *.wikibooks.com or *.wikibook.com -> org +rewrite *.wikibooks.com //*.wikibooks.org +rewrite *.wikibook.com //*.wikibooks.org +rewrite wikibook.com //en.wikibooks.org +rewrite *.wikibook.org //*.wikibooks.org +rewrite wikibook.org //en.wikibooks.org + +rewrite textbook.wikipedia.org //www.wikibooks.org + +# Education program + +funnel educacao.wikimedia.org //pt.wikipedia.org/wiki/Wikip%C3%A9dia:WU + +override education.wikimedia.org/evaluating //commons.wikimedia.org/wiki/File:Evaluating_Wikipedia_brochure.pdf +override education.wikimedia.org/illustrating //commons.wikimedia.org/wiki/File:Illustrating_Wikipedia_brochure.pdf + +override education.wikimedia.org/casestudies //outreach.wikimedia.org/wiki/Education/Case_Studies + +override education.wikimedia.org/content //outreach.wikimedia.org/wiki/Education/Case_Studies/content +override education.wikimedia.org/copyediting //outreach.wikimedia.org/wiki/Education/Case_Studies/copyediting +override education.wikimedia.org/definitions //outreach.wikimedia.org/wiki/Education/Case_Studies/definitions +override education.wikimedia.org/featuredarticle //outreach.wikimedia.org/wiki/Education/Case_Studies/featuredarticle +override education.wikimedia.org/fivecriteria //outreach.wikimedia.org/wiki/Education/Case_Studies/fivecriteria +override education.wikimedia.org/illustrations //outreach.wikimedia.org/wiki/Education/Case_Studies/illustrations +override education.wikimedia.org/milestones //outreach.wikimedia.org/wiki/Education/Case_Studies/milestones +override education.wikimedia.org/peerreviews //outreach.wikimedia.org/wiki/Education/Case_Studies/peerreviews +override education.wikimedia.org/photos //outreach.wikimedia.org/wiki/Education/Case_Studies/photos +override education.wikimedia.org/reflectivepapers //outreach.wikimedia.org/wiki/Education/Case_Studies/reflectivepapers +override education.wikimedia.org/translationarabic //outreach.wikimedia.org/wiki/Education/Case_Studies/translationarabic +override education.wikimedia.org/translationspanish //outreach.wikimedia.org/wiki/Education/Case_Studies/translationspanish +override education.wikimedia.org/videos //outreach.wikimedia.org/wiki/Education/Case_Studies/videos +override education.wikimedia.org/writearticle //outreach.wikimedia.org/wiki/Education/Case_Studies/writearticle + +override education.wikimedia.org/syllabus //outreach.wikimedia.org/wiki/Education/The_Syllabus +override education.wikimedia.org/welcometowikipedia //commons.wikimedia.org/wiki/File:Welcome_to_Wikipedia_brochure_EN.pdf +override education.wikimedia.org/instructorbasics //commons.wikimedia.org/wiki/File:Instructor_Basics_How_to_Use_Wikipedia_as_a_Teaching_Tool.pdf + +funnel education.wikimedia.org //outreach.wikimedia.org/wiki/Education + +# Localised TLDs + +rewrite *wikinews.de //de.wikinews.org +rewrite *wicipediacymraeg.org //cy.wikipedia.org +rewrite *wikipedia.org.il //he.wikipedia.org +rewrite *wikipedia.co.il //he.wikipedia.org +rewrite *vikimedija.org //rs.wikimedia.org +rewrite *wikipedia.bg //bg.wikipedia.org +rewrite *wikipedia.co.za //af.wikipedia.org +rewrite *wikibooks.cz //cs.wikibooks.org +rewrite *wikicitaty.cz //cs.wikiquote.org +rewrite *wikidruhy.cz //species.wikimedia.org +rewrite *wikiquote.cz //cs.wikiquote.org +rewrite *wikisource.cz //cs.wikisource.org +rewrite *wikispecies.cz //species.wikimedia.org +rewrite *wikiversity.cz //cs.wikiversity.org +rewrite *wikiverzita.cz //cs.wikiversity.org +rewrite *wikizpravy.cz //cs.wikinews.org +rewrite *wikizdroje.cz //cs.wikisource.org +rewrite *wiktionary.cz //cs.wiktionary.org +rewrite *wikislovnik.cz //cs.wiktionary.org +rewrite *wikiknihy.cz //cs.wikibooks.org +rewrite *wikisource.pl //pl.wikisource.org + +# RT-3244 +override *wikipedie.cz/Experti_na_prirodu //cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu +override *wikipedie.cz/Experti-na-prirodu //cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu +override *wikipedie.cz/experti_na_prirodu //cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu +override *wikipedie.cz/experti-na-prirodu //cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu + +rewrite *wikipedie.cz //cs.wikipedia.org +rewrite *wikipedia.cz //cs.wikipedia.org + +# wikimedia.ee / wikipedia.ee - RT #4566 +rewrite *wikimedia.ee //et.wikimedia.org + +rewrite *wikipedia.ee //et.wikipedia.org + +rewrite *wikimedia.biz //www.wikimedia.org +rewrite *wikimedia.jp.net //www.wikimedia.org + +rewrite *wikimedia.lt //wikimediafoundation.org +rewrite *wikipedia.lt //lt.wikipedia.org + +rewrite *wikimemory.org //www.wikimedia.org + +# Wikipedia + +rewrite *en-wp.com //en.wikipedia.org +rewrite *en-wp.org //en.wikipedia.org + +rewrite wikiipedia.org //www.wikipedia.org +rewrite www.wikiipedia.org //www.wikipedia.org + +rewrite wikipedia.com //www.wikipedia.org +rewrite wikipedia.net //www.wikipedia.org +rewrite wikipedia.info //www.wikipedia.org +rewrite www.wikipedia.com //www.wikipedia.org +rewrite www.wikipedia.net //www.wikipedia.org + +rewrite en.wikipedia.com //en.wikipedia.org +rewrite en2.wikipedia.org //en.wikipedia.org + +rewrite *wikipedia.co.uk //en.wikipedia.org + +rewrite *.wikipedia.com //*.wikipedia.org +rewrite *.wikipedia.net //*.wikipedia.org +rewrite *.wikipedia.info //*.wikipedia.org +rewrite www.*.wikipedia.com //*.wikipedia.org +rewrite www.*.wikipedia.net //*.wikipedia.org +rewrite www.*.wikipedia.info //*.wikipedia.org +rewrite *.wiki-pedia.org //*.wikipedia.org +rewrite *.wikipaedia.net //*.wikipedia.org + +rewrite wikipaedia.net //www.wikipedia.org +rewrite wiki-pedia.org //www.wikipedia.org + +funnel *visualwikipedia.com //www.wikipedia.org +funnel *visualwikipedia.net //www.wikipedia.org +funnel *webhostingwikipedia.com //www.wikipedia.org +funnel *wikifamily.com //www.wikipedia.org +funnel *wikifamily.org //www.wikipedia.org + +# wikipedia typo domains to www. instead of en - RT #4679,#4681 +funnel *wiikipedia.com //www.wikipedia.org +funnel *wekipedia.com //www.wikipedia.org +funnel *wikiepdia.com //www.wikipedia.org +funnel *wikiepdia.org //www.wikipedia.org +funnel *wikiipedia.org //www.wikipedia.org +funnel *wikpedia.org //www.wikipedia.org + +# Wiktionary + +rewrite *.wiktionary.com //*.wiktionary.org +rewrite wiktionary.com //www.wiktionary.org +rewrite www.wiktionary.com //www.wiktionary.org +funnel *wiktionary.eu //www.wiktionary.org + +# Wikisource + +rewrite sources.wikipedia.org //wikisource.org +rewrite *.wikisource.com //*.wikisource.org +rewrite wikisource.com //wikisource.org + + +# Wikiquote + +rewrite quote.wikipedia.org //en.wikiquote.org +rewrite wikiquote.com //www.wikiquote.org +rewrite *.wikiquote.com //*.wikiquote.org +rewrite wikiquote.net //www.wikiquote.org +rewrite *.wikiquote.net //*.wikiquote.org + +# Wikinews + +rewrite wikinews.com //www.wikinews.org +rewrite *.wikinews.com //*.wikinews.org + +# Wikispecies + +# Temporarily at species.wikipedia.org until DNS is sorted out +rewrite *wikispecies.com //species.wikimedia.org +rewrite *wikispecies.org //species.wikimedia.org +rewrite *wikispecies.net //species.wikimedia.org + +rewrite species.wikipedia.org //species.wikimedia.org + +# Wikiversity + +rewrite *.wikiversity.com //*.wikiversity.org +rewrite *.wikiversity.net //*.wikiversity.org +rewrite *.wikiversity.info //*.wikiversity.org + +rewrite wikiversity.com //www.wikiversity.org +rewrite wikiversity.net //www.wikiversity.org +rewrite wikiversity.info //www.wikiversity.org + +# Wikivoyage +rewrite *.wikivoyage.com //*.wikivoyage.org +rewrite *.wikivoyage.de //*.wikivoyage.org +rewrite *.wikivoyage.eu //*.wikivoyage.org +rewrite *.wikivoyage.net //*.wikivoyage.org +rewrite wikivoyage.com //www.wikivoyage.org +rewrite wikivoyage.de //www.wikivoyage.org +rewrite wikivoyage.eu //www.wikivoyage.org +rewrite wikivoyage.net //www.wikivoyage.org + +# Wikivoyager (RT-4333) +rewrite *.wikivoyager.org //*.wikivoyage.org +rewrite *.wikivoyager.de //*.wikivoyage.org +rewrite wikivoyager.org //www.wikivoyage.org +rewrite wikivoyager.de //www.wikivoyage.org + +# Voyagewiki (RT-5539) +rewrite *.voyagewiki.com //*.wikivoyage.org +rewrite *.voyagewiki.org //*.wikivoyage.org +rewrite voyagewiki.com //www.wikivoyage.org +rewrite voyagewiki.org //www.wikivoyage.org + +# wikimediafoundation +rewrite *wikimediafoundation.com //wikimediafoundation.org +rewrite *wikimediafoundation.net //wikimediafoundation.org +rewrite *wikimediafoundation.info //wikimediafoundation.org +rewrite *.wikimediafoundation.org //wikimediafoundation.org + +# Commons + +rewrite *wikimediacommons.net //commons.wikimedia.org +rewrite *wikimediacommons.info //commons.wikimedia.org +rewrite *wikimediacommons.mobi //commons.wikimedia.org +rewrite *wikimediacommons.eu //commons.wikimedia.org +rewrite *wikimediacommons.org //commons.wikimedia.org +rewrite *wikimediacommons.jp.net //commons.wikimedia.org +rewrite *wikimediacommons.pt //commons.wikimedia.org +rewrite *wikimediacommons.co.uk //commons.wikimedia.org + +rewrite commons.wikipedia.org //commons.wikimedia.org +rewrite www.commons.wikimedia.org //commons.wikimedia.org +rewrite www.commons.wikipedia.org //commons.wikimedia.org + +# Bookshelf Project +rewrite bookshelf.wikimedia.org //outreach.wikimedia.org/wiki/Bookshelf/ + +# Random acquired cruft +funnel *wikidisclosure.com //www.wikimedia.org +funnel *wikidisclosure.org //www.wikimedia.org +funnel *wikimaps.com //www.wikimedia.org +funnel *wikimaps.net //www.wikimedia.org +funnel *wikimaps.org //www.wikimedia.org + + +# Other projects + +rewrite meta.wikipedia.org //meta.wikimedia.org +rewrite www.meta.wikipedia.org //meta.wikimedia.org +rewrite www.meta.wikimedia.org //meta.wikimedia.org + +rewrite quality.wikipedia.org //quality.wikimedia.org +rewrite quality.wikipedia.com //quality.wikimedia.org + +rewrite bugzilla.wikipedia.org https://bugzilla.wikimedia.org +rewrite bugs.mediawiki.org https://bugzilla.wikimedia.org +rewrite bugzilla.mediawiki.org https://bugzilla.wikimedia.org + +rewrite *mediawiki.com //www.mediawiki.org +rewrite wiki.mediawiki.org //www.mediawiki.org + +# Continuous Integration RT 6593, RT 6594 +funnel doc.mediawiki.org https://doc.wikimedia.org +funnel integration.mediawiki.org https://integration.wikimedia.org + +rewrite *softwarewikipedia.com //www.mediawiki.org +rewrite *softwarewikipedia.net //www.mediawiki.org +rewrite *softwarewikipedia.org //www.mediawiki.org + +rewrite nostalgia.wikimedia.org //nostalgia.wikipedia.org + +############### +## projects +############### +#wikipedia is in wwwportals.conf +rewrite mediawiki.org //www.mediawiki.org +rewrite wikimedia.org //www.wikimedia.org +rewrite wikinews.org //www.wikinews.org +rewrite wikiquote.org //www.wikiquote.org +rewrite wikiversity.org //www.wikiversity.org +rewrite wikivoyage.org //www.wikivoyage.org +rewrite wikibooks.org //www.wikibooks.org +rewrite wiktionary.org //www.wiktionary.org +rewrite wikidata.org //www.wikidata.org #bug 45005 + +rewrite www.wikisource.org //wikisource.org + +############### +## chapters +############### +funnel ch.wikimedia.org //www.wikimedia.ch + +rewrite hu.wikimedia.org http://wiki.media.hu + +rewrite it.wikimedia.org http://www.wikimedia.it + +funnel kr.wikimedia.org //meta.wikimedia.org/wiki/위키미디어_대한민국 + +# pk.wikimedia.org (bug 54780) +funnel pk.wikimedia.org //meta.wikimedia.org/wiki/Wikimedia_Community_User_Group_Pakistan + +# pt.wikimedia.org was migrated to wikimedia.pt +funnel pt.wikimedia.org http://wikimedia.pt + +rewrite uk.wikimedia.org https://wikimedia.org.uk/ + +rewrite ve.wikimedia.org http://wikimedia.org.ve + + +# Wikimania +rewrite wikimania.wikimedia.org //wikimania2014.wikimedia.org +rewrite *wikimania.asia //wikimania2013.wikimedia.org + +# labs -> wikitech +funnel labs.wikimedia.org https://wikitech.wikimedia.org + +# wikimedia.com redirect +funnel *wikimedia.com //www.wikimedia.org + +# wikimedia.us redirect +funnel *wikimedia.us //www.wikimedia.org + +# tartupeedia.ee (WMEE-owned domain) - bug 44893 +funnel *tartupeedia.ee //et.wikipedia.org/wiki/Portaal:Tartupeedia + +# indiawikipedia.com - RT #1395 +funnel *indiawikipedia.com http://wikimedia.in/wikipedia.html + +# wikipedia.in +funnel *wikipedia.in http://wikimedia.in/wikipedia.html + +# coffee - keep for historic reasons:) +funnel coffee.wikimedia.org //en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol + +# wikipediazero.org - RT #5039 +funnel *wikipediazero.org //wikimediafoundation.org/wiki/Wikipedia_Zero + +# wikimediastories.com/net/org - RT #4942 +funnel *wikimediastories.com //wikimediafoundation.org/wiki/Thank_You_All +funnel *wikimediastories.net //wikimediafoundation.org/wiki/Thank_You_All +funnel *wikimediastories.org //wikimediafoundation.org/wiki/Thank_You_All +funnel *wikipediastories.com //wikimediafoundation.org/wiki/Thank_You_All +funnel *wikipediastories.net //wikimediafoundation.org/wiki/Thank_You_All +funnel *wikipediastories.org //wikimediafoundation.org/wiki/Thank_You_All + +# jobs/careers - RT #5709 +rewrite *careers.wikimedia.org //wikimediafoundation.org/wiki/Job_openings +rewrite *careers.wikipedia.org //wikimediafoundation.org/wiki/Job_openings +rewrite *jobs.wikimedia.org //wikimediafoundation.org/wiki/Job_openings +rewrite *jobs.wikipedia.org //wikimediafoundation.org/wiki/Job_openings +override *careers.wikimedia.org/ //wikimediafoundation.org/wiki/Work_with_us +override *careers.wikipedia.org/ //wikimediafoundation.org/wiki/Work_with_us +override *jobs.wikimedia.org/ //wikimediafoundation.org/wiki/Work_with_us +override *jobs.wikipedia.org/ //wikimediafoundation.org/wiki/Work_with_us + +# mobile redirects for commonly-used domains +funnel mobile.wikipedia.org //m.wikipedia.org +rewrite *.mobile.wikipedia.org //*.m.wikipedia.org +rewrite *.wap.wikipedia.org //*.m.wikipedia.org + +# pywikipedia.org (bug #58803). +funnel *pywikipedia.org //tools.wmflabs.org/pywikibot/ + +# w.wiki - upcoming URL shortener +funnel *w.wiki //www.wikipedia.org + +# RT #7862 +override wikimedia.org/research https://s.qualtrics.com/SE/?SID=SV_6R04ammTX8uoJFP&Preview=Survey&BrandID=wikimedia diff --git a/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects b/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects new file mode 100755 index 0000000..28fd369 --- /dev/null +++ b/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects @@ -0,0 +1,472 @@ +#!/usr/bin/env php +<?php + +/** + * Process redirects.dat and generate redirects.conf from it. + * + * See the comments in redirects.dat for the input format. + * + * Usage: + * ./refreshDomainRedirects + * + * The source file is assumed to be in the same directory as + * the script, while the output one is assumed to be in the parent + * directory. + */ +class DomainRedirectParser { + var $dir, $lineNum, $lines, $rules; + + function __construct( $dir ) { + $this->dir = $dir; + $this->output_file = $this->dir."/../redirects.conf"; + $this->lineNum = 0; + $lines = file( "$dir/redirects.dat" ); + if ( $lines === false ) { + $this->error( "Unable to open input file" ); + } + $this->lines = array_map( 'rtrim', $lines ); + $this->rules = array( + 'wildcard' => array(), + 'plain' => array(), + 'wildcardOverride' => array(), + 'plainOverride' => array() + ); + } + + function execute() { + while ( false !== ( $line = $this->nextLine() ) ) { + // Remove comments + $line = preg_replace( '/#.*$/', '', $line ); + // Remove leading and trailing whitespace + $line = trim( $line ); + if ( $line === '' ) { + continue; + } + + $args = preg_split( '/\s+/', $line ); + $cmd = array_shift( $args ); + switch ( $cmd ) { + case 'funnel': + $this->doFunnel( $args ); + break; + case 'rewrite': + $this->doRewrite( $args ); + break; + case 'override': + $this->doOverride( $args ); + break; + default: + $this->error( "Invalid command \"$cmd\"" ); + } + } + + $this->checkOrphanOverrides(); + $this->checkLoops(); + $this->writeApacheConf(); + } + + function nextLine() { + if ( $this->lineNum < count( $this->lines ) ) { + return $this->lines[$this->lineNum++]; + } else { + return false; + } + } + + function error( $msg ) { + throw new DomainRedirectParser_Error( $msg, $this->lineNum ); + } + + /** + * Process a funnel command at the current input position + * @param array $args The arguments to the command + */ + function doFunnel( $args ) { + if ( count( $args ) != 2 ) { + $this->error( "funnel must be given two parameters" ); + } + list( $domain, $dest ) = $args; + $destInfo = $this->interpretDest( $dest ); + + if ( strpos( $domain, '*' ) !== false ) { + $wildcardList = $this->interpretWildcard( $domain ); + foreach ( $wildcardList as $wildcard ) { + $domainRegex = $wildcard['domainRegex']; + if ( strpos( $domainRegex, '(' ) !== false ) { + $wildcardDest = str_replace( '*', '%1', $destInfo['dest'] ); + } else { + $wildcardDest = $destInfo['dest']; + } + + $this->rules['wildcard'][] = array( + 'domain' => $domain, + 'domainRegex' => $domainRegex, + 'alias' => $wildcard['alias'], + 'pathRegex' => '.', + 'dest' => $wildcardDest, + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } else { + $this->rules['plain'][] = array( + 'domain' => $domain, + 'domainRegex' => "=$domain", + 'alias' => $domain, + 'pathRegex' => '.', + 'dest' => $destInfo['dest'], + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } + + /** + * Process a rewrite command at the current input position + * @param array $args The arguments to the command + */ + function doRewrite( $args ) { + if ( count( $args ) != 2 ) { + $this->error( "rewrite must be given two parameters" ); + } + + list( $domain, $dest ) = $args; + $destInfo = $this->interpretDest( $dest ); + // Strip trailing slash from dest + if ( substr( $destInfo['dest'], -1 ) === '/' ) { + $destInfo['dest'] = substr( $destInfo['dest'], 0, -1 ); + } + + if ( strpos( $domain, '*' ) !== false ) { + $wildcardList = $this->interpretWildcard( $domain ); + foreach ( $wildcardList as $wildcard ) { + $domainRegex = $wildcard['domainRegex']; + if ( strpos( $domainRegex, '(' ) !== false ) { + $wildcardDest = str_replace( '*', '%1', $destInfo['dest'] ); + } else { + $wildcardDest = $destInfo['dest']; + } + $this->rules['wildcard'][] = array( + 'domain' => $domain, + 'domainRegex' => $domainRegex, + 'alias' => $wildcard['alias'], + 'pathRegex' => '.*', + 'dest' => "$wildcardDest\$0", + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } else { + $this->rules['plain'][] = array( + 'domain' => $domain, + 'domainRegex' => "=$domain", + 'alias' => $domain, + 'pathRegex' => '.*', + 'dest' => $destInfo['dest'] . '$0', + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } + + /** + * Process an override command at the current input position + * @param array $args The arguments to the command + */ + function doOverride( $args ) { + if ( count( $args ) != 2 ) { + $this->error( "override must be given two parameters" ); + } + list ( $source, $dest ) = $args; + $destInfo = $this->interpretDest( $dest ); + $slashPos = strpos( $source, '/' ); + if ( $slashPos === false ) { + $this->error( "the source of an override must include a path component" ); + } + $domain = substr( $source, 0, $slashPos ); + $path = substr( $source, $slashPos ); + + if ( strpos( $domain, '*' ) !== false ) { + $wildcardList = $this->interpretWildcard( $domain ); + foreach ( $wildcardList as $wildcard ) { + $domainRegex = $wildcard['domainRegex']; + if ( strpos( $domainRegex, '(' ) !== false ) { + $wildcardDest = str_replace( '*', '%1', $destInfo['dest'] ); + } else { + $wildcardDest = $destInfo['dest']; + } + $this->rules['wildcardOverride'][] = array( + 'domain' => $domain, + 'domainRegex' => $domainRegex, + 'alias' => $wildcard['alias'], + 'pathRegex' => '^' . preg_quote( $path ) . '$', + 'dest' => $wildcardDest, + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } else { + $this->rules['plainOverride'][] = array( + 'domain' => $domain, + 'domainRegex' => "=$domain", + 'alias' => $domain, + 'pathRegex' => '^' . preg_quote( $path ) . '$', + 'dest' => $destInfo['dest'], + 'destDomain' => $destInfo['domain'], + 'lineNum' => $this->lineNum, + ); + } + } + + /** + * Interpret a <dest> token and return information about it. See the comment + * in redirects.dat for information about forms it can take. + */ + function interpretDest( $dest ) { + // Escape non-ASCII characters + $dest = preg_replace_callback( + '/[\x80-\xff]/', + function ($matches) { + return '\\' . urlencode( $matches[0] ); + }, + $dest ); + + + if ( preg_match( '!^(https?://)([^/]*)(/.*$|$)!', $dest, $m ) ) { + $domain = $m[2]; + $path = $m[3]; + if ( $path === '' ) { + $dest .= '/'; + } + } elseif ( preg_match( '!^//([^/]*)(/.*$|$)!', $dest, $m ) ) { + $dest = '%{ENV:RW_PROTO}:' . $dest; + $domain = $m[1]; + $path = $m[2]; + if ( $path === '' ) { + $dest .= '/'; + } + } else { + $this->error( "destination must be either a protocol-relative or a fully-specified URL" ); + } + return array( + 'dest' => $dest, + 'domain' => $domain, + ); + } + + /** + * Interpret a source domain wildcard and return information about it. + */ + function interpretWildcard( $wildcard ) { + if ( preg_match( '/^\*\.([^*]*)$/', $wildcard, $m ) ) { + return array( array( + 'domainRegex' => "^(.+)\." . preg_quote( $m[1] ) . '$', + 'alias' => $wildcard, + ) ); + } elseif ( preg_match( '/^\*([^*]*)$/', $wildcard, $m ) ) { + return array( + array( + 'domainRegex' => '=' . $m[1], + 'alias' => $m[1], + ), + array( + 'domainRegex' => "^(.+)\." . preg_quote( $m[1] ) . '$', + 'alias' => "*." . $m[1], + ) + ); + } elseif ( preg_match( '/^([^*]*)\.\*\.([^*]*)$/', $wildcard, $m ) ) { + return array( array( + 'domainRegex' => '^' . preg_quote( $m[1] ) . '\.(.+)\.' . preg_quote( $m[2] ) . '$', + 'alias' => $wildcard, + ) ); + } elseif ( strpos( $wildcard, '*' ) !== false ) { + $this->error( "invalid use of asterisk in domain pattern" ); + } else { + return array( array( + 'domainRegex' => '=' . $wildcard, + 'alias' => $wildcard + ) ); + } + } + + /** + * Check to see if any override rules were given which didn't have an + * associated funnel or rewrite, and raise an error if any are found. + */ + function checkOrphanOverrides() { + $servers = array(); + + foreach ( array( 'wildcard', 'plain' ) as $type ) { + foreach ( $this->rules[$type] as $rule ) { + $servers[$rule['alias']] = true; + } + } + + foreach ( array( 'wildcardOverride', 'plainOverride' ) as $type ) { + foreach ( $this->rules[$type] as $rule ) { + if ( !isset( $servers[$rule['alias']] ) ) { + throw new DomainRedirectParser_Error( + "override rules must have an associated funnel or rewrite", $rule['lineNum'] ); + } + } + } + } + + /** + * Check for double or infinite redirects and raise an error if any are found. + */ + function checkLoops() { + $flatRules = array(); + foreach ( $this->rules as $type => $rules ) { + foreach ( $rules as $rule ) { + $flatRules[] = $rule; + } + } + + for ( $i = 0; $i < count( $flatRules ); $i++ ) { + for ( $j = 0; $j < count( $flatRules ); $j++ ) { + $outboundRule = $flatRules[$i]; + $inboundRule = $flatRules[$j]; + $outboundDomain = $outboundRule['destDomain']; + $inboundDomain = $inboundRule['domain']; + $inboundRegex = $inboundRule['domainRegex']; + $wildcardPos = strpos( $outboundDomain, '%1' ); + if ( $wildcardPos !== false ) { + $outboundSuffix = substr( $outboundDomain, $wildcardPos + 2 ); + if ( $outboundSuffix == substr( $inboundDomain, -strlen( $outboundSuffix ) ) ) { + throw new DomainRedirectParser_Error( + "double redirect: rule has destination domain $outboundDomain " . + "which matches relevant suffix of source domain \"$inboundDomain\" " . + "from line {$inboundRule['lineNum']}", + $outboundRule['lineNum'] ); + } + } elseif ( $inboundRegex[0] === '=' ) { + if ( $inboundDomain === $outboundDomain ) { + throw new DomainRedirectParser_Error( + "double redirect: rule has destination domain $outboundDomain " . + "from line {$inboundRule['lineNum']}", + $outboundRule['lineNum'] ); + } + } elseif ( preg_match( "!$inboundRegex!", $outboundDomain ) ) { + throw new DomainRedirectParser_Error( + "double redirect: rule has destination domain $outboundDomain " . + "which matches wildcard $inboundDomain " . + "from line {$inboundRule['lineNum']}", + $outboundRule['lineNum'] ); + } + } + } + } + + /** + * Write the collected rules to the output file. + */ + function writeApacheConf() { + $f = fopen( $this->output_file, 'w' ); + if ( !$f ) { + throw new DomainRedirectParser_Error( "Unable to open redirects.conf for writing" ); + } + + $servers = array(); + foreach ( array( 'wildcard', 'plain' ) as $type ) { + foreach ( $this->rules[$type] as $rule ) { + $servers[$rule['alias']] = true; + } + } + + fwrite( $f, + "# This file is generated by redirects/refreshDomainRedirects from the\n". + "# source file redirects.dat and managed on servers by Puppet\n". + "# Do not edit it manually!\n" . + "\n" . + "<VirtualHost *>\n" . + "\tServerName redirector\n" . + "\tServerAlias \\\n" ); + + foreach ( $servers as $server => $unused ) { + fwrite( $f, "\t$server \\\n" ); + } + fwrite( $f, "\n" ); + fwrite( $f, <<<EOT + # allow caching for redirects + <IfModule mod_headers.c> + Header set Cache-control "s-maxage=86000, max-age=0, must-revalidate" + </IfModule> + <IfModule mod_expires.c> + ExpiresActive On + ExpiresByType image/gif A2592000 + ExpiresByType image/png A2592000 + ExpiresByType image/jpeg A2592000 + ExpiresByType text/css A2592000 + ExpiresByType text/javascript A2592000 + ExpiresByType application/x-javascript A2592000 + ExpiresByType text/html A2592000 + </IfModule> + + DocumentRoot /usr/local/apache/common/docroot/default + + RewriteEngine On + + RewriteRule . - [E=RW_PROTO:%{HTTP:X-Forwarded-Proto}] + RewriteCond %{ENV:RW_PROTO} !=https + RewriteRule . - [E=RW_PROTO:http] + +EOT + ); + + // Write more specific rules first, followed by less specific rules + $precedence = array( + 'plainOverride', + 'wildcardOverride', + 'plain', + 'wildcard', + ); + + foreach ( $precedence as $type ) { + fwrite( $f, "\n\t# Type: $type\n" ); + foreach ( $this->rules[$type] as $rule ) { + fwrite( $f, + "\t# " . $this->getLine( $rule['lineNum'] ) . "\n" . + "\tRewriteCond %{HTTP_HOST} {$rule['domainRegex']}\n" . + "\tRewriteRule {$rule['pathRegex']} {$rule['dest']} [R=301,L,NE]\n" ); + } + } + + fwrite( $f, + "</VirtualHost>\n" . + "# vim" . ": sts=4 sw=4 autoindent syn=apache\n" ); + fclose( $f ); + } + + function getLine( $lineNum ) { + if ( isset( $this->lines[$lineNum - 1] ) ) { + return $this->lines[$lineNum - 1]; + } else { + return false; + } + } +} + +class DomainRedirectParser_Error extends Exception { + function __construct( $message, $lineNum = 0 ) { + if ( $lineNum ) { + $realMessage = "error in line $lineNum: $message"; + } else { + $realMessage = "error: $message"; + } + parent::__construct( $realMessage ); + $this->lineNum = $lineNum; + } +} + +$parser = false; +try { + $parser = new DomainRedirectParser( __DIR__ ); + $parser->execute(); +} catch ( DomainRedirectParser_Error $e ) { + print $e->getMessage() . "\n"; + if ( $parser && $parser->getLine( $e->lineNum ) ) { + print "{$e->lineNum}: " . $parser->getLine( $e->lineNum ) . "\n"; + } + exit(1); +} diff --git a/modules/mediawiki/manifests/web.pp b/modules/mediawiki/manifests/web.pp index 6fa5b58..61b9d1e 100644 --- a/modules/mediawiki/manifests/web.pp +++ b/modules/mediawiki/manifests/web.pp @@ -1,6 +1,6 @@ # mediawiki::web -class mediawiki::web ( $workers_limit = undef, $use_sites_available = false ) { +class mediawiki::web ( $workers_limit = undef) { tag 'mediawiki', 'mw-apache-config' include ::mediawiki @@ -35,14 +35,10 @@ require => Package['apache2'], } - if ! $use_sites_available { - file { '/etc/apache2/wikimedia': - ensure => directory, - recurse => true, - source => 'puppet:///modules/mediawiki/apache/config', - before => Service['apache2'], - } - } else { - include ::mediawiki::web::sites + # do not erase this for now, it may come handy soon... + file { '/etc/apache2/wikimedia': + ensure => directory, } + + include ::mediawiki::web::sites } diff --git a/modules/mediawiki/templates/apache/apache2.conf.erb b/modules/mediawiki/templates/apache/apache2.conf.erb index ff7dec4..688afe5 100644 --- a/modules/mediawiki/templates/apache/apache2.conf.erb +++ b/modules/mediawiki/templates/apache/apache2.conf.erb @@ -319,13 +319,7 @@ ErrorDocument 404 /w/404.php NameVirtualHost * - -<%- if @use_sites_available -%> Include sites-enabled/*.conf -<%- else -%> -Include /etc/apache2/wikimedia/all.conf -Include /etc/apache2/sites-enabled/99-monitoring.conf -<%- end -%> # Set ETags for files to not be based on inode, # since that will be different on each backend server -- To view, visit https://gerrit.wikimedia.org/r/147066 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I42a07252bf6ed37231ecba587e8dfc018e5c6609 Gerrit-PatchSet: 4 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Giuseppe Lavagetto <glavage...@wikimedia.org> Gerrit-Reviewer: Alexandros Kosiaris <akosia...@wikimedia.org> Gerrit-Reviewer: Filippo Giunchedi <fgiunch...@wikimedia.org> Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org> Gerrit-Reviewer: Mark Bergsma <m...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits