у меня есть url.map
содержащий правило перезаписи
~^/A/shopby/(?<brand>[a-zA-Z]+) ~^/category/by-brand/$brand;
так что /A/shopby/a_brand
будет перенаправлен на /category/by-brand/a_brand
А также config file
map $request_uri $new_uri {
include /etc/nginx/urls.map;
}
server {
rewrite_log on;
error_log /var/log/nginx/error.log notice;
if ($new_uri) {
# return 200 $new_uri; for debugging
rewrite $request_uri $new_uri permanent;
}
location / {
root /a_root;
index index.html;
try_files $uri $uri/ /index.html;
}
}
И я продолжаю получать это
*60 "$request_uri" does not match "/A/shopby/a_brand"
а также моя отладка только вернула мне ~^/category/by-brand/$brand
который показал, что регулярное выражение не заменяет захваченную строку
Что я упустил в процессе? Любая помощь будет принята с благодарностью
Ваш rewrite
оператор неверен, так как первый параметр должен быть регулярным выражением, а не переменной.
Но вам не нужно использовать rewrite
когда вы меняете весь URI. Постоянная перезапись эквивалентна return 301
.
Например:
if ($new_uri) {
return 301 $new_uri;
}
Если вам нужно передать исходные аргументы (которые rewrite
будет делать по умолчанию), используйте:
if ($new_uri) {
return 301 $new_uri$is_args$args;
}
Видеть этот документ для подробностей.