Доступ к веб-странице осуществляется следующим образом:
`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;
}
Почти идентичный вопрос всего пару недель назад:
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;
}
Смысл в том, чтобы создать цикл перенаправления, но не совсем, так как существует разница между внешними и внутренними редиректами, то есть цикл не является замкнутым, так как один редирект является явно только внешним, а другой - явно только внутренним.
.Это должно сработать. В основном он перехватывает строку после косой черты, до конца строки, и вызывает сайт с этой строкой в качестве параметра
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, содержимое которых является их именем. Без переписывания браузер показывает "сайт". При перезаписи отображается "сайт". Это доказывает мне, что тестовая конфигурация работает
.