![nginx перенаправляет /2013/04/test.html на /test - не работает](https://rvso.com/image/623652/nginx%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%20%2F2013%2F04%2Ftest.html%20%D0%BD%D0%B0%20%2Ftest%20-%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82.png)
Я схожу с ума по этому поводу. Как мне перенаправить определенный URL-адрес /2013/04/test.html
в /test
nginx?
Я попробовал это: но не работает:
server {
location /2013/05/test.html {
return 301 http://$server_name/test;
}
}
Я провел несколько тестов — по какой-то причине любой URL-адрес без расширения .html в части местоположения строки конфигурации будет перенаправляться правильно, но как только я помещаю .html в местоположение, бабах, все перестает работать.
Есть идеи, почему это так? Спасибо!
решение1
Вместо того чтобы иметь блок местоположения для каждого перенаправления, вы всегда можете просто добавить правила перезаписи в существующий блок местоположения:
rewrite /2013/05/test.html http://$server_name/test permanent;
rewrite /2013/05/test2.html http://$server_name/test2 permanent;
Вы также можете использовать различные регулярные выражения, чтобы избежать необходимости добавлять новое выражение каждый раз при добавлении новой «постоянной ссылки».
решение2
Я согласен с Джейсоном Илисичем, используяпереписать правиловероятно, было бы более эффективно.
Если вы действительно хотите использоватьблок местоположения, вы пробовали использовать модификатор "="? Если у вас несколько расположений, логика выбора Nginx может выбирать не то, что вы ожидаете.
Из документации Nginx
using the “=” modifier it is possible to define an exact match of URI and location
так например
server {
location = /2013/05/test.html {
return 301 http://$server_name/test;
}
}