
Я схожу с ума по этому поводу. Как мне перенаправить определенный 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;
}
}