質問: ### 実現したいこと FTPサーバーに存在しないフォルダをURLで指定したら、404エラーになってほしい ### 前提 FTPサーバーのルートに 「bbb」というフォルダは存在しないが、 「bbb.html」というファイルは存在する。 「ccc.jpg」は存在しない。 ### 発生している問題 FTPサーバーのルートに「bbb」というフォルダは存在しないのに https://aaa/bbb/ と指定するとなぜか「bbb.html」が表示される 存在しないフォルダ「bbb」の中の存在しない画像「ccc.jpg」についても404エラーになってほしいのに https://aaa/bbb/ccc.jpg でアクセスするとなぜか「bbb.html」の内容が表示されます。 ### 試したこと ●URLの指定方法を調べる https://pr.toriaez.jp/navi/column/404.html ↓ ●サーバーの設定を管理者に聞く 『Apache』の設定によるものであり、 「.htaccess」に「Options -MultiViews」と記述で改善するかもとの回答。 ただしサポート対象外、自己責任でとのことなので、不安が残る ↓ ●MultiViewsについて調べる https://httpd.apache.org/docs/2.4/ja/content-negotiation.html ↓ ●MultiViewsについてわかったこと サーバが /some/dir/foo へのリクエストを受け取り、 /some/dir で MultiViews が有効であって、 /some/dir/foo が存在しない場合、 サーバはディレクトリを読んで foo.* にあてはまる全てのファイルを探し、 ・・・省略 クライアントの要求に一番合うものを選びます。 上記だと末尾にスラッシュがないURLを指定した時に、拡張子を付与して探してくれる機能みたいですが 今回の例では、「https://aaa/bbb/」のように末尾にスラッシュがあるURLを指定した時に起こる挙動なので 今回のケースには「MultiViews」は関係ないかもしれないと思い、行き詰まっています。 ### ルートに設置しているhtaccess SEOの重複コンテンツ対策でリダイレクトさせてます。 https://lolipop.jp/manual/hp/htaccess-08/ を参考に記述しました。 ``` RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://%{HTTP_HOST}/$1 [R=301,L] AddHandler php7.4-script .html ```
回答: レンタルサーバーの人の言う通り、 「.htaccess」ファイルに「Options -MultiViews」と記述してアップロードしたら改善しました。 MultiViewsの解説サイトである、 https://httpd.apache.org/docs/2.4/ja/content-negotiation.html に載っているケースと異なるので躊躇していましたが、よかったです。