Есть страница 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На другом сайте есть одна страница, которая содержит форму, которая отправляет запрос ajaxЯ хочу создать PHP-скрипт, который заполнит эту форму...
Нужен аналог microtime() функции в php или что-то в этом родеФункция должна выдавать секунды и микросекунды