Определение, должен ли URL иметь косую черту в конце в Java

Я пытаюсь выполнить какое-то сканирование, и я столкнулся с вопросом, когда добавлять слеш или нет. Я знаю, что некоторые сайты имеют его в конце, а некоторые нет, но ввод неправильного в браузер просто перенаправит вас на правильный. Нормализация добавит косую черту в конце, но это вызовет проблему при попытке преобразовать относительные URL в абсолютные.

Например, если пользователь выбирает абсолютный URL http://stack.com/more но фактический (перенаправленный) URL http://stack.com/more/ и относительный URL-адрес index.html

Затем делать URL newurl = new URL(url, relativeURL);

доходность http://stack.com/index.html (несуществующая страница)

когда это должно быть на самом деле http://stack.com/more/index.html(реальная страница)

Кто-нибудь знает хороший способ правильно добавить косую черту в конце?

1 ответ

Решение

Если относительный URL начинается с /, это только относительно корня (домена). Так что оба

http://stack.com/more/ + /index.html

а также

http://stack.com/more + /index.html

правильно разрешены

http://stack.com/index.html

не

http://stack.com/more/index.html

В вашем примере не имеет значения, есть ли / в конце more,

Уловка возникает, когда на относительном URL нет косой черты, например index.html, При их разрешении вы должны удалить последний сегмент и заменить его относительным путем. Это имело бы значение в этом случае, потому что

http://stack.com/more/ + index.html

решает в

http://stack.com/more/index.html

но

http://stack.com/more + index.html

решает в

http://stack.com/index.html

(index.html заменяет more, так как more это последний сегмент).

Другие вопросы по тегам