Оптимальный способ создания правил перезаписи nginx для красивого URL [закрыто]

Доступ к веб-странице осуществляется следующим образом:

`example.com/` or `example.com/?site=website` 

В этом примере я получаю доступ к веб-сайтам , расположенным в домене example.com .

Кто-нибудь может предложить оптимальный способ переписывания правил, чтобы приведенное выше было показано и доступно по адресу example.com/website или просто example.com/ , если нет ] сайт отправлен?

nginx, Centos 7

ОБНОВЛЕНИЕ

Пробовал следующее:

location / {
    index index.php;
    rewrite ^/(website)$ /site?$1;
}
-4
задан 5 August 2017 в 12:19
2 ответа

Почти идентичный вопрос всего пару недель назад:

https://stackoverflow. com/questions/45257380/nginx-rewrite-query-string-args-to-html-url-w-o-backend-support/45293264#45293264

https://gist.github.com/cnst/3521404dfdf5cb7b4c526b5c6dff38ff

location = / {
    if ($arg_site) {
        return  302 /$arg_site;
    }
    return  200
    "<!DOCTYPE html><title>site</title>
    <form><input name='site' value='website'/></form>\n";
}
location / {
    rewrite     ^/([^/]*)\$     /?site=$1   break;
    proxy_pass  http://localhost:7381;
}

Смысл в том, чтобы создать цикл перенаправления, но не совсем, так как существует разница между внешними и внутренними редиректами, то есть цикл не является замкнутым, так как один редирект является явно только внешним, а другой - явно только внутренним.

.
1
ответ дан 5 December 2019 в 22:11

Это должно сработать. В основном он перехватывает строку после косой черты, до конца строки, и вызывает сайт с этой строкой в качестве параметра

location /
  rewrite ^/(website)$ /site?$1;
}

Браузер должен использовать URL типа http://example.com/abcd , внутри Nginx будет вызывать http://example.com/site=abcd . Очевидно, что вам нужно настроить место, которое будет отвечать на запросы на этом URL. Например

location /site
  proxy_pass localhost:1234;
}

Я провел тест, используя простую конфигурацию Nginx, которая отличается только тем, что для теста требуется расширение .html.

server {
  listen 80;
  server_name test1.example.com;

  location / {
    root /var/www/test1;
    rewrite ^/(website).html$ /site.html?$1;
  }    
}

Я создал два файла, site.html и site.html, содержимое которых является их именем. Без переписывания браузер показывает "сайт". При перезаписи отображается "сайт". Это доказывает мне, что тестовая конфигурация работает

.
0
ответ дан 5 December 2019 в 22:11

Теги

Похожие вопросы