server {
if ($request_uri != $uri) {
return 302 $scheme://$host$uri;
}
location / {
try_files $uri /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
$ curl -I http://localhost/page
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.18.0
Date: Tue, 01 Jul 2025 12:33:50 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://localhost/index.php
location / {
try_files $uri /index.php;
}
$request_uri=/foo
$uri=/index.php
location / {
try_files $uri @php;
}
location @php {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
include fastcgi_params;
}
Обработка статических файлов
Мы используем связку веб-серверов Nginx и Apache, чтобы статические файлы отдавались быстрее. Все статические файлы обрабатывает Nginx, а динамикой занимается Apache.
Из-за этого на хостинге нет гибкого контроля над статическими файлами. Директивы в файле .htaccess тоже не сработают, потому что это конфиг для Apache.
В консоли браузера есть: WebSocket connection to 'wss://books.site.ru/ws' failed:
/ws
проксировать на wss://127.0.0.1:12380/ws
Redirect 301 / https://newdomain.com/newpage
/ -> /newpage
/File.css -> /newpageFile.css
/Cat/Page -> /newpageCat/Page
/ -> /newpage
/File.css -> /newpage
/Cat/Page -> /newpage
Redirect 301 /old/ /new/
Redirect 301 / https://msk.di-service.ru/
RedirectMatch 301 ^/$ https://msk.di-service.ru/
limit_req_zone $access_locale_browser
, то не учитываются только запросы с пустым значением ключа.# Разрешенные языки браузера, которые не должны ограничиваться в req_limit_zone.
map $is_search_bot:$http_accept_language $access_locale_browser {
# По умолчанию под req_limir_zone подпадают все
default "1";
# Если это разрешенные боты Google и Yandex
"~^1:" "";
# Если в браузере установлен русский язык
"~^0:ru" "";
}
"~^zh:0"
en-US,en;q=0.5
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/astrology/?$ [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php [NC]
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif|webp|svg|woff2?)$ [NC]
RewriteRule ^(.*)$ https://yandex.ru/turbo?text=https://%{HTTP_HOST}/$1 [R=301,L,QSA]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/($|astrology/?$|wp-admin|wp-login\.php|.*\.(css|js|png|jpe?g|gif|webp|svg|woff2?)$) [NC]
RewriteRule ^(.*)$ https://yandex.ru/turbo?text=https://%{HTTP_HOST}/$1 [R=301,L,QSA]
limit_req_zone ключ
Просто, в документации не видел такие фишки.
.+?
?
переключает в ленивый режим и совпадение наименьшей длины.(?:...)
не сохраняют совпавший текст, а лишь группируют компоненты регулярных выражений в конструкции выбора.(?!...)
негативная опережающая проверка.
/
после site.ru не работает.https://ru.wikipedia.org/wiki/HTTP#%D0%9F%D1%80%D0...
Например, запрос site.ru/ будет выглядеть так:
Если оставить только site.ru и убрать /
Это синтаксическая ошибка в запросе клиента и сервер сообщит об ошибке 400 Bad Request.
Браузер может не отображать в адресной строке
/
, но в запросе всегда добавит его.