Экранирование строк запроса с помощью wget --mirror
Я использую wget --mirror --html-extension --convert-links
для зеркалирования сайта, но я получаю множество имен файлов в формате post.php?id=#.html
, Когда я пытаюсь просмотреть их в браузере, происходит сбой, потому что браузер игнорирует строку запроса при загрузке файла. Есть ли способ заменить ?
символ в именах файлов с чем-то еще?
Ответ --restrict-file-names=windows
работал правильно. В сочетании с флагами --convert-links
а также --adjust-extension
/-E
(ранее названный --html-extension
, который также работает, но не рекомендуется), он производит зеркало, которое ведет себя как ожидалось.
wget --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
3 ответа
Увидеть --restrict-file-names
вариант. Хотя не совсем предназначен для этой конкретной цели, --restrict-file-names=windows
вероятно, поможет вам вместе:
--restrict-файл-имена = режимы
Изменить, какие символы, найденные в удаленных URL-адресах, должны быть экранированы при генерации локальных имен файлов. [...]
Когда задано "windows", Wget экранирует символы \, |, /,:,?, ", *, <,>И управляющие символы в диапазонах 0--31 и 128--159. В дополнение к этому Wget в режиме Windows использует + вместо: для разделения хоста и порта в локальных именах файлов и использует @ вместо? Для разделения части запроса имени файла от остальных, поэтому URL-адрес будет сохранен как www.xemacs.org:4300/search.pl?input=blah в режиме Unix будет сохранен как www.xemacs.org+4300/search.pl@input=blah в режиме Windows.
Ваш браузер будет хорошо смотреться, если вы используете URL, например
file:///tmp/example.com/post.php%3Fid=1.html
вместо
file:///tmp/example.com/post.php?id=1.html
Примечание: если у вас возникли проблемы с внутренними ссылками из загруженных файлов, это может быть связано с тем, что вы завершили работу wget до того, как это было сделано при загрузке. Так как вы указали --convert-links и --html-extension (применяется только тогда, когда они указаны), wget обычно исправляет ссылки для использования%3F вместо?; тем не менее, он делает это в конце, после завершения загрузки; если он был прерван, он не исправит ни одну из ссылок, и вы останетесь в этом затруднительном положении. Конечно, вы всегда можете написать скрипт, чтобы пройти и исправить ссылки, но...
У wget нет возможности изменить сохраненное имя. Что вам, вероятно, нужно будет сделать, это создать сценарий, чтобы пройти и заменить? с _ или чем-то похожим. Один только Wget не может этого сделать.