Como fazer example.com/about mostrar example.com/about.html? (Apache2)

Como fazer example.com/about mostrar example.com/about.html? (Apache2)

Qual é a melhor opção ao tentar fazer com que example.com/about mostre example.com/about.html e sem alterar o URL para /about.html. No momento, estou tentando o código a seguir, ele apenas retorna um erro 404.

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

Editar #1 paraw3dkAtualmente tenho multiviews ativados, mas ainda recebo um erro 404. Aqui está minha configuração atual no VirtualHost

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

Responder1

Em vez de usar mod_rewrite parareescrever internamentea solicitação, você poderia simplesmente usar MultiViews (mod_negotiation):

Options +MultiViews

mod_rewrite permite que você faça uma reescrita de URL mais complexa; no entanto, se tudo o que você estiver fazendo for remover a extensão do arquivo, o MultiViews será suficiente - é para isso que foi projetado.

Quando você faz uma solicitação para /about(um URL/arquivo sem extensão em um diretório válido), com MultiViews habilitado, mod_negotiation irá procurar um arquivo que corresponda ao tipo MIME esperado e retorná-lo como uma solicitação interna.

ATUALIZAR:

Options All +MultiViews

Esta não é uma sintaxe válida (presumo que você deva estar no Apache 2.2, pois isso falharia com um erro durante a inicialização do Apache 2.4). Como observado noDocumentos do Apache:

Aviso
Misturar Optionscom a +ou -com aqueles sem não é uma sintaxe válida e provavelmente causará resultados inesperados.

Para expressar Alle MultiViewsvocê precisaria de duas diretivas:

Options All
Options +MultiViews

Allé o padrão (no Apache 2.2), então isso pode não ser necessário. No entanto, seria preferível especificar apenas as opções necessárias numa única directiva, por exemplo:

Options FollowSymLinks Includes MultiViews

Responder2

você pode tentar assim: acho que vai funcionar

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

Você também pode usar o redirecionamento:

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

informação relacionada