¿Cómo hacer que example.com/about muestre example.com/about.html? (apache2)

¿Cómo hacer que example.com/about muestre example.com/about.html? (apache2)

¿Cuál es la mejor opción cuando se intenta que example.com/about muestre example.com/about.html y sin cambiar la URL a /about.html? En este momento estoy intentando usar el siguiente código y simplemente devuelve un error 404.

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

Editar #1 aw3dkActualmente tengo habilitadas las vistas múltiples pero sigo recibiendo el error 404. Aquí está mi configuración actual en VirtualHost

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

Respuesta1

En lugar de usar mod_rewrite parareescribir internamentela solicitud, podrías usar MultiViews (mod_negotiation) en su lugar:

Options +MultiViews

mod_rewrite le permite realizar reescrituras de URL más complejas; sin embargo, si todo lo que está haciendo es eliminar la extensión del archivo, entonces MultiViews será suficiente: para eso está diseñado.

Cuando realiza una solicitud /about(una URL/archivo sin una extensión en un directorio válido), con MultiViews habilitado, mod_negotiation buscará un archivo que coincida con el tipo mime esperado y lo devolverá como una solicitud interna.

ACTUALIZAR:

Options All +MultiViews

Esta no es una sintaxis válida (supongo que debes estar en Apache 2.2, ya que esto produciría un error durante el inicio en Apache 2.4). Como se señala en eldocumentos apache:

Advertencia
Mezclar Optionscon a +o -con aquellos que no tienen una sintaxis no válida y es probable que produzca resultados inesperados.

Para expresar Ally MultiViewsnecesitarías dos directivas:

Options All
Options +MultiViews

Alles el valor predeterminado (en Apache 2.2), por lo que puede que no sea necesario. Sin embargo, sería preferible especificar sólo las opciones que necesita en una sola directiva, por ejemplo:

Options FollowSymLinks Includes MultiViews

Respuesta2

¿Puedes intentarlo así? Creo que funcionará.

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

También puedes utilizar la redirección:

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

información relacionada