質問: URLの末尾に/を追加 ----------- ``` wget -p -E -nH -np -k -r -l1 https://files.example/works/section_a/ ``` URL末尾に`/`を追加してwgetを実行した結果、`404 Not Found`となってしまいました。 ``` ... HTTP request sent, awaiting response... 404 Not Found 2021-01-05 19:16:16 ERROR 404: Not Found. ``` なお末尾にスラッシュを付けた状態でブラウザでアクセスを試みた場合、ページが見つからないという状態となっております。
回答: > > なぜ-npオプションを付けた状態でhttps://files.example/works/section_aを指定しているにもかかわらず、同階層のディレクトリのファイルがダウンロードされてしまうのでしょうか? > > > `-np` は `--no-parent` ですから、親階層を取得しないという意味ですよね。 同階層は取得対象になります。 > > またsection_aのファイルのみをダウンロードする方法は存在しますか? > > > `section_b`,`section_c`を取得しているのは`-r`で再帰取得を指定しているからなので、以下のように`-r -l1`を付けなければいいのではないでしょうか。 ``` wget -p -E -nH -np -k https://files.example/works/section_a ``` 追記 == `section_a`はファイルかと思っていましたが、ディレクトリなのですね。 `https://files.example/works/section_a`というURLが有った場合、ベースとなるディレクトリは`/works/`であり、`section_a`はファイルだと解釈されます。 `section~a`がディレクトリだった場合、通常Webサーバはクライアントにディレクトリで有る事を伝える為に`https://files.example/works/section_a/`へリダイレクトするメッセージを返します。 `https://files.example/works/section_a/`ならばベースディレクトリは`/works/section_a/`となるので、-npオプションは期待通り働くでしょう。 しかし、wgetで`https://files.example/works/section_a/`を指定すると Not Found となるのですね。 リダイレクト先としてファイルを直接返してきているのかもしれません。 wgetを実行した時に以下のようにリダイレクトのメッセージが出ていませんか? ``` HTTP request sent, awaiting response... 301 Moved Permanently Location: https://files.example/works/section_a/index.html [following] ``` リダイレクト先として`section_a`の中のファイルを返してきていた場合はwgetでそのURLを指定すればいいでしょう。 問題なのは`section_a`の外のファイルを返してきていた場合や、リダイレクトされていなかった場合ですね。その場合は以下のように`--accept-regex`オプションで`/works/section_a`を指定してみて下さい。 ``` wget -p -E -nH -np -k -r -l1 --accept-regex '/works/section_a' https://files.example/works/section_a ``` ただし、`section_a`の下のhtmlを表示するのに必要なファイル(画像等)が`section_a`の外側に有った場合は、上記だとそれらのファイルの取得が出来ません。 その場合は以下のように`--reject-regex`オプションで`section_b`等を除外する方がいいかもしれません。 ``` wget -p -E -nH -np -k -r -l1 --reject-regex '/works/section_[b-z]' https://files.example/works/section_a ```