Я пытаюсь сделать короткие 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
к истине.