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
に 使用することは有効な構文ではなく、予期しない結果を引き起こす可能性があります。+
-
を表現するにはAll
、MultiViews
2 つのディレクティブが必要になります。
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