Есть страница php, которая выводит шаблон, обращаться будут напрямую к php файлу, как подменить урл страниц (но чтобы php отработал нормально)? Подскажите, пожалуйста. Пример: http://bla-bla.ru/pages/urururu.php
КОРОТКО
server {
# ...
rewrite ^/(.*)$ /pages/$1.php last;
# ...
}
будет перенаправлять запросы с http://bla-bla.ru/urururu на http://bla-bla.ru/pages/urururu.php
server {
# ...
rewrite ^/pages/(.*)$ /pages/$1.php last;
# ...
}
будет перенаправлять запросы с http://bla-bla.ru/pages/urururu на http://bla-bla.ru/pages/urururu.php
Замечание
Флаг last в конце директив rewrite значит, что данное правило, если оно применится будет последним в цепи обработки, данного пути и с ним больше никто ничего не сделает. Если данный флаг не поставить, то если путь будет соответствовать последующей директиве rewrite, то она его тоже обработает.
Небольшой ликбез по регулярным выражениям
^/pages/(.*)$ - это регулярное выражение
Символ ^ - обозначает начало строки
Символ $ - обозначает конец строки
Символ . - обозначает любой символ
Символ * после точки - квантификатор и обозначает количество символов, в данном случае - любое
Таким образом сочетание символов .* - означает любое количество любых символов
Символы () - применяются для группировки ряда символов, позже в замене ты сможешь обращаться к этим сгруппированным символам с помощью символа $ и номера группировки
Соответственно, если у тебя несколько группировок
Например /users/(.*)/events/(.*)
То ты сможешь обращаться к ним так:
/event.php?user=$1&event=$2
$1- первая группировка, $2- вторая группировка и т.д.
ПОДРОБНЕЕ О ДИРЕКТИВЕ rewrite
В NGINX есть модуль ngx_http_rewrite_module, который позволяет изменять URI запроса с помощью регулярных выражений PCRE, делать перенаправления и т.д.
Синтаксис: rewrite regex замена [флаг];
regex - это регулярное выражение, на соответствие которому будет проверяться путь
замена - это тот путь на который стоит перенаправить запрос.
[флаг] - необязательный параметр, один из 4 флагов(last, break, redirect, permanent)
Если указанное регулярное выражение соответствует URI запроса, URI изменяется в соответствии со строкой замены.
флаги
last - завершает обработку текущего набора директив
break - завершает обработку текущего набора директив
redirect - возвращает временное перенаправление с кодом 302
permanent - возвращает постоянное перенаправление с кодом 301
Контекст: server, location, if Это значит что данная директива может находится в блоках
server{
# rewrite ...
}
.
location * {
# rewrite ...
}
.
if * {
# rewrite ...
}
БОЛЬШЕ ПРИМЕРОВ
server{
rewrite ^/api/(.*)$ /api.php?model=$1 last;
rewrite ^/news/(.*)$ /news.php?slug=$1 last;
rewrite ^/users/([\d]+)/notes/([\w_\-]+)$ /user_notes.php?user_id=$1¬e=$2 last;
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
}
Документация по ngx_http_rewrite_module: https://nginx.ru/ru/docs/http/ngx_http_rewrite_module.html#rewrite
Сборка персонального компьютера от Artline: умный выбор для современных пользователей