rewrite rule: MediaWiki to static site

Francis Daly francis at daoine.org
Mon Aug 20 11:29:02 UTC 2018


On Mon, Aug 20, 2018 at 06:09:10AM -0400, petecooper wrote:

Hi there,

> I'm diverting traffic from an retired MediaWiki site to an active static
> site. I'm somewhat confused with the process of `rewrite`-ing old URLs with
> a query string to standard URLs *without* a query string on the static site.
> For clarity, I do not need or want query strings on the new site.

In this case, it looks to me that you can probably "return" rather than
"rewrite", since everything should probably be a http redirect.

> Retired URLs examples:
> 
>     https://example.com/wiki/index.php?title=en/Main_Page
>     https://example.com/wiki/index.php?title=Glossary
>     https://example.com/wiki/index.php?title=Category:Troubleshooting
> 
> New URLs examples:
> 
>     https://example.net/MainPage
>     https://example.net/Glossary
>     https://example.net/Troubleshooting
> 
> All the retired URLs are attached to `/wiki/index.php` with a single query
> string.
> 
> There is no direct correlation between the old URLs and the new ones, and I
> have a before-and-after list of URLs to put into a 200+ entry `rewrite`
> list.
> 
> My question is two-fold:
> 
> 1) Is it better (objectively) to have all the rewrite rules inside a
> `location` referring to `/wiki/index.php` since the only non-Mediawiki URL
> on the retired site is `/`?

Yes. Except I would have the config be not a lot more than

  location = /wiki/index.php { return 301 https://example.net/$my_static_wiki; }

> 2) How can I best build the `rewrite` list without using `if` or nested
> `map`?

  map $arg_title $my_static_wiki {
    default ""; # or whatever
    en/Main_Page MainPage;
    Glossary Glossary;
    Category:Troubleshooting Troubleshooting;
  }

Make that map (http://nginx.org/r/map) be as big as you like. And you can
"include" an external file if you find that easier.

Note: I use "$arg_title" are the string. You could use "$query_string",
but then the matching values would be of the form title=en/Main_Page.

And because I put "http://example.net/" in the "return" directive,
I don't put that part of the destination url in the map. Adjust to taste.

> I am grateful for your time and attention, and I would very much appreciate
> an example rewrite rule and/or some reading recommendations for `rewrite`
> with query strings.

If you still want to know about rewrite with query strings, you can look
at http://nginx.org/r/rewrite

Basically -- the incoming query string is preserved unless you ask for
it not to be.

Good luck with it,

	f
-- 
Francis Daly        francis at daoine.org


More information about the nginx mailing list