example.com/about に example.com/about.html を表示させるにはどうすればいいですか? (Apache2)

example.com/about に example.com/about.html を表示させるにはどうすればいいですか? (Apache2)

example.com/about を example.com/about.html に表示し、URL を /about.html に変更しない場合に最適なオプションは何ですか。現在、次のコードを実行しようとしていますが、404 エラーが返されます。

RewriteRule ^/about$ https://example.com/about.html [R=301,L]

編集#1翻訳:現在、マルチビューを有効にしていますが、それでも404エラーが発生します。これがVirtualHostの現在の設定です。

<Directory /var/www/public_html>
    Options All +MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

答え1

mod_rewriteを使用する代わりに内部的に書き換えるリクエストの代わりに、MultiViews (mod_negotiation) を使用することもできます。

Options +MultiViews

mod_rewrite を使用すると、より複雑な URL 書き換えが可能になりますが、ファイル拡張子を削除するだけであれば、MultiViews で十分です。これは、MultiViews が設計されている目的です。

有効なディレクトリ内の拡張子のない URL/ファイルを要求すると/about、MultiViews が有効になっている場合、mod_negotiation は予想される MIME タイプに一致するファイルを検索し、それを内部要求として返します。

アップデート:

Options All +MultiViews

これは有効な構文ではありません(Apache 2.4では起動時にエラーが発生するため、Apache 2.2を使用していると思われます)。Apache ドキュメント:

警告
または を なしのものと一緒Optionsに 使用することは有効な構文ではなく、予期しない結果を引き起こす可能性があります。+-

を表現するにはAllMultiViews2 つのディレクティブが必要になります。

Options All
Options +MultiViews

Allはデフォルトです (Apache 2.2 の場合) ので、これは必要ないかもしれません。ただし、必要なオプションだけを 1 つのディレクティブで指定することが望ましいです。たとえば、次のようになります。

Options FollowSymLinks Includes MultiViews

答え2

次のように試してみていただけますか?うまくいくと思います

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^about$ https://example.com/about.html [R=301,L]

リダイレクトを使用することもできます:

Redirect 301 /about http://example.com/about.html
Redirect 301 /any_dir/about http://example.com/about.html

関連情報