Назад | Перейти на главную страницу

короткие URL-адреса nginx для mediawiki

Я пытаюсь сделать короткие URL-адреса для сайта MediaWiki. Вики находится в подкаталоге mydir (http://www.example.com/mywiki). Я уже настроил перезаписи в /etc/nginx/sites-available так что example.com перенаправляет на example.com/mywiki.

В настоящее время URL-адрес похож на http://www.example.com/mywiki/index.php?title=Main_Page. Я хочу очистить URL-адрес, чтобы он выглядел как http://www.example.com/mywiki/Main_Page. У меня довольно большие проблемы с этим. Я не знаком с регулярными выражениями или синтаксисом, который используют файлы конфигурации nginx.

Вот что у меня сейчас есть:

server_name example.com www.example.com;

location / 
{
  rewrite ^.+ /mywiki/ permanent;
}

location /wiki/ 
{
  rewrite ^/mywiki/([^?]*)(?:\?(.*))? /mywiki/index.php?title=$1&$2 last;
}

Очевидно, что вторая перезапись сломана. Он основан на Заголовок страницы - nginx rewrite - root-доступ в документации MediaWiki.

Когда я пытаюсь загрузить сайт, браузер сообщает мне, что я получаю бесконечные перенаправления. Есть ли у кого-нибудь, как мне решить эту проблему? Или, скорее, как это правильно реализовать и что означают все эти символы?

У них там очень интересное выражение. На их главной странице руководства по коротким URL-адресам говорится следующее:

Эти руководства старые и почти полностью плохие советы.

В любом случае, давайте посмотрим, сможем ли мы его немного упростить.

rewrite ^/wiki/([^\?]*) /mywiki/index.php?title=$1&$args last;

Обратите внимание, что вы не можете наложить "красивый" путь (который вы указали в location блок, так что давайте работать с ним) и физический путь; нормой является использование /wiki/ как красивый путь (ваш $wgArticlePath config) и /w/ как физический путь (ваш $wgScriptPath config).

Итак, в общем, примерно так:

location / {
  rewrite ^/$ /wiki/ permanent;
}

location /wiki/ {
  rewrite ^/wiki/([^\?]*) /mywiki/index.php?title=$1&$args last;
}

... и вам понадобится обработка PHP в той или иной форме, как они показали в своем примере, а также для обновления вашего Settings.php с соответствующими $wgScriptPath и $wgArticlePath настройки, а также настройка $wgUsePathInfo к истине.