Форум программистов, компьютерный форум, киберфорум
Nginx
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
 Аватар для Lion_astana
16 / 16 / 8
Регистрация: 15.03.2010
Сообщений: 321

Разные правила в nginx для редиректов и создания ЧПУ для каждого поддомена и основного домена

19.09.2018, 14:02. Показов 2067. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Хочу перекинуть сайт с Апача на nginx + php-fpm

Сайт только что перевел на https.

Использую ISP manager, там все просто, для www домена поменял обработчика и все работает.
Сайт и поддомены открываются, НО старые htaccess то теперь не действуют, не по душу nginx они были написаны.

Я кучу мануалов и примеров посмотрел по конвертации правил из htaccess в nginx, но от возрастающего объема информации начал путаться и сомневаться, а проект рабочий, не хочется сидеть и косячить пол дня смущая посетителей неправильной работой сайта.

Есть основной домен site.ru и три (в скором будующем добавится еще несколько) поддомена: my.site.ru, msk.site.ru, spb.site.ru

msk и spb - региональные поддомены, my - личный кабинет пользователя.

Что из общих правил для всех: редирект с www на без www, название домена(поддомена).index.php редирект на название домена(поддомена), а также любая http://(любая страница домена(поддомена)) редирект на такой же адрес с https://.

Внутри для региональных поддоменов spb и msk правила в их htaccess одинаковые за исключением строк:

Code
1
2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://msk.site.ru/ [R=301,L]
У поддомена my - свои правила и редиректы.

Как это теперь реализовать в nginx, чтобы работа сайта продолжилась в штатном режиме?

Для разделения правил для домена и поддоменов нужно использовать что-то подобное:

Code
1
2
3
if ($http_host = msk.site.ru) {
  rewrite  (.*)  https://site.ru$1;
}
Или я не туда копаю?

Для домена и поддоменов указано в каждом из htaccess(он лежит в главной директории у каждого свой) такое:
Code
1
2
3
4
5
6
7
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{ENV:HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://site.ru/ [R=301,L]
Только строка RewriteRule ^index\.php$ https://site.ru/ [R=301,L] разная у всех внутри, так как там прописано у поддоменов их адрес. Но, насколько я понял из изучения данной темы, в nginx можно не указывать адрес в явном виде и прописать что-то подобное:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
         listen 80;
         server_name site.ru www.site.ru;
         return 301 https://$host$request_uri;
 }
 
server {
     server_name "~^www\.(.*)$" ;
     return 301 $scheme://$1$request_uri;
 }
 
server {
         if ($request_uri ~ "^(.*)index\.(?:php|html)") {
                 return 301 $1;
         }
 }
Это верно или нет? Здесь в первом server смущает server_name site.ru www.site.ru; Получается что если у меня есть поддомены то их все нужно перечислять в этой строке или можно добавить еще *.site.ru?

Как быть с разделением правил для основного домена и поддоменов, которые индивидуальны?
Для основного домена есть, например такое:

Code
1
2
RewriteRule ^admin$ /s/admin.php [L]
RewriteRule ^rules$ /s/rules.php [L]
У поддомена my совсем свои правила, например:
Code
1
2
3
RewriteRule ^resume$ /resumes.php$1 [L]
RewriteRule ^resume/new$ /resumeNew.php$1 [L]
RewriteRule ^resume/(\d+)$ /resume.php?r=$1 [L]
А вот все поддомены кроме my (и даже у тех которые могут появиться, но сейчас их нет) имеют общие правла, например:
Code
1
2
3
4
5
6
7
8
RewriteRule ^area$ /section.php?id=area [L]
RewriteRule ^area/([^/]*)$ /index.php?area=$1 [L]
RewriteRule ^area/([^/]*)/([^/]*)$ /index.php?area=$1&treat=$2 [L]
RewriteRule ^o-([^/]*)$ /area/$1 [R=301,L]
 
RewriteRule ^company/([^/]*)/media/news$ /clinic.php?id=$1&section=news [L]
RewriteRule ^company/([^/]*)/media/news/page-([^/]*)$ /clinic.php?id=$1&section=news&page=$2 [L]
RewriteRule ^company/([^/]*)/media/news/([^/]*)$ /clinic.php?id=$1&section=news&article=$2 [L]
Голова кругом идет, как это все реализовать? С редиректами и правилами в Nginx сталкиваюсь впервые. Сможет кто-нибудь подсказать, может кто для себя такое уже прошёл?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2018, 14:02
Ответы с готовыми решениями:

Cookie для домена и поддомена
Всем привет, ребят, подскажите как правильно установить куки на поддомене, чтоб они были видны на других поддоменах и на самом домене? ...

Перенос директив для работы ЧПУ с Apache на Nginx
Привет, перехожу с Apache на Nginx и не совсем понял, как перенести MVC: AddDefaultCharset utf-8 DirectoryIndex index.php ...

Как прописать правила для каждого браузера?
Как прописать правила для каждого браузера? Для ie // вот так,а для других не знаю,подскажите?

5
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
19.09.2018, 15:58
1. Рекомендую отказаться от ISP и аналогов.
2. Не нужно переписывать апач правила в nginx правила, проще и правильнее будет написать конфиги заново, исходя из логики работы сайтов. Для этого естественно придется потратить некоторое время на изучение nginx и его good practice

https://habr.com/company/oleg-bunin/blog/313666/
https://www.nginx.com/resource... _pitfalls/
0
 Аватар для Lion_astana
16 / 16 / 8
Регистрация: 15.03.2010
Сообщений: 321
19.09.2018, 17:59  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Рекомендую отказаться от ISP
Боюсь не хватит знаний и времени сечас (((

По Вашим ссылкам прошел, интересно очень, но сложнова-то для меня. Я понимаю Вас что не нужнопереписывать апач, но вопрос именно в том, как правильно разрулить мою ситуацию. Из статей я понял что лучше return, чем rewrite, ОК не спорю, можно и так. Как вообще правильно разделить провила для домена, поддомена my и остальных поддоменов?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
19.09.2018, 18:02
Lion_astana, использоватть 3 секции server.
0
 Аватар для Lion_astana
16 / 16 / 8
Регистрация: 15.03.2010
Сообщений: 321
19.09.2018, 19:18  [ТС]
Что-то типа такого:?

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
server {
         listen 80;
         server_name site.ru www.site.ru *.site.ru;
         return 301 https://$host$request_uri;
 }
 
server {
     server_name "~^www\.(.*)$" ;
     return 301 $scheme://$1$request_uri;
 }
 
server {
    server_name site.ru;
    return 301 $scheme://site.ru$request_uri;
 
    if ($request_uri ~ "^(.*)index\.(?:php|html)") {
          return 301 $1;
    }
   # [...]
}
 
server {
    server_name my.site.ru
    if ($request_uri ~ "^(.*)index\.(?:php|html)") {
          return 301 $1;
    }
    # [...]
}
 
server {
    server_name ^(.*).site.ru
    if ($request_uri ~ "^(.*)index\.(?:php|html)") {
          return 301 $1;
    }
    # [...]
}
Вообще правильно ли написано и можно ли их объединить в три блока как вы написали, пусть и повторяясь с инструкциями внутри каждого?
0
 Аватар для Lion_astana
16 / 16 / 8
Регистрация: 15.03.2010
Сообщений: 321
20.09.2018, 13:39  [ТС]
Народ, сможет кто-нибудь помочь? Нигде не могу найти похожие примеры.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2018, 13:39
Помогаю со студенческими работами здесь

Редирект с главной страницы одного домена на конкретную страницу другого домена на nginx
Подскажите, как сделать редирект 301 (permament) на nginx именно с главной страницы одного домена на конкретную страницу другого домена,...

Nginx и показ не существующего поддомена
Добрый день. Есть такая конфигурация: На одном ip несколько сайтов site1.ru site2.ru site3.ru и сайты с подоменами subsite.site2.ru...

Посоветуйте утилиту для создания картинок под разные экраны Android
Может прога какая-то, или плагин по ФШ, всё равно что.

Бан домена или поддомена ?!
Hi All ! Есть сайт site.ru. Есть другие сайты на поддоменах site1.site.ru, site2.site.ru, site3.site.ru, и т.п. Если происходит бан , к...

Отображение тИЦ поддомена такое же как и домена
Вот повесил на поддомен денюжку а она показывает тИЦ самого домена, может нужно кудато написать что бы всё было как надо ?!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru