#regex #nginx #url-rewriting
Вопрос:
Это конфигурация nginx:
location @rewrite {
rewrite ^/threads/ /thread.php?$uriamp;$args last;
}
Этот код работает нормально, но сейчас я хочу использовать другой маршрут.
OLD: /threads/123-yyy-yyy-yyy
NEW: /xxx-xxx-xxx/123-yyy-yyy-yyy
Я пробовал что-то вроде:
rewrite ^/[w] /([d] -[w] )?$ /thread.php?$1amp;$args last;
rewrite ^/[w] /([d] -[w] )?$ /thread.php?$1amp;$args last;
rewrite ^/w /(d -w )?$ /thread.php?$1amp;$args last;
rewrite ^/w /(d -w )$ /thread.php?$1amp;$args last;
Но страница не найдена, так что я предполагаю, что в моем регулярном выражении что-то не так.
Может быть, это параметр $uri/$1?
Ответ №1:
- Вам не нужно добавлять
amp;$args
в свои правила перезаписи. Какrewrite
указано в документации nginx,
Если строка замены содержит новые аргументы запроса, после них добавляются предыдущие аргументы запроса. Если это нежелательно, установка вопросительного знака в конце строки замены позволяет избежать их добавления, например:
rewrite ^/users/(.*)$ /show?user=$1? last;
w
метасимвол включаетa-z
,A-Z
,0-9
и подчеркивание(_
). Он не включает символ тире. Вы можете попробовать это регулярное выражение:rewrite ^/[-w] /([d] -[-w] )$ /thread.php?$1 last;