Подтвердить что ты не робот

Переписать корневой адрес в подкаталог в nginx

Я конвертирую свой сайт mediawiki, чтобы использовать nginx в качестве интерфейса для статических файлов с apache на сервере для php. Я получил все, что работает до сих пор, за исключением случаев, когда я просматриваю корневой каталог "example.com", он пытается обслуживать список каталогов и дает ошибку 403, так как у меня отключено и у меня нет индексного файла.

Правило перезаписи apache, которое у меня есть сейчас, просто:

RewriteRule ^$ /wiki/Main_Page [L]

Я попробовал что-то подобное с директивой location в nginx, но он не работает:

location = / {
    rewrite "^$" /wiki/Main_Page;
}

Остальные директивы моего местоположения:

location / {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    try_files $uri /w/index.php?title=$1&$args;
    expires max;
    log_not_found off;
}

location ~ \.php?$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
}

Я могу просто поместить в него файл index.php с заголовком ('Location:'), но я предпочел бы просто сделать это правильно с помощью правила перезаписи.

Все примеры, которые я нашел в Интернете для работы mediawiki с nginx, запускают wiki как wiki.example.com вместо подкаталога /wiki/.

Изменить: я также попытался добавить к try_files, как это: try_files $uri $uri/ @rewrite /wiki/Main_Page; с тем же результатом ошибки 403.

4b9b3361

Ответ 1

Я нашел помощь в чате nginx irc.

В принципе, мне нужно было использовать возврат вместо перезаписи. Поэтому я изменил это:

location = / {
    rewrite "^$" /wiki/Main_Page;
}

:

location = / {
    return 301 http://www.example.com/wiki/Main_Page;
}

Ответ 2

Я предпочитаю использовать:

location = / {
    return 301 http://$host/wiki/Main_Page;
}

Ответ 3

  • Удостоверьтесь, что "/wiki/Main_Page" можно получить доступ к
  • Проверьте серверный раздел, нет глобальных правил перезаписи. Правила перезаписи в разделе сервера будут выполняться до раздела местоположения.
  • Использование правил перезаписи в разделе местоположения следующим образом:

    location = / {
         rewrite "^.*$" /wiki/Main_Page break;    
    }
    

Обратите внимание на "break" здесь. Средства вызывают цикл перезаписи.

Если эта страница находится на сервере backend, здесь следует использовать proxy_pass.

Ответ 4

Ответ, который вы использовали, - это перенаправление, что позволяет пропустить местоположение / в расположение /wiki, вы можете попробовать это вместо

location = / {
    rewrite ^ /w/index.php?title=Main_Page&$args last;
}

Это должно быть сервер Main_Page для / URI

Ответ 5

Вот мое решение:

if ($uri = '/'){
    rewrite ^/(.*)$ http://example.com/wiki/Main_Page permanent;
}