Como tornar example.com/about show example.com/about.html? (Apache2)

1

Qual é a melhor opção para tentar obter example.com/about show example.com/about.html e sem alterar a URL para /about.html. Agora eu estou tentando o seguinte código apenas retorna um erro 404.

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

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

<Directory /var/www/public_html>
    Options All +MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
    
por dotconnor 20.01.2017 / 01:39

2 respostas

2

Em vez de usar o mod_rewrite para reescrever internamente o pedido, você pode usar o MultiViews (mod_negotiation):

Options +MultiViews

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

Quando você faz uma solicitação para /about (uma URL / arquivo sem uma extensão em um diretório válido) e com o MultiView ativado, mod_negotiation procurará um arquivo que corresponda ao tipo mime esperado e retornará como uma solicitação interna .

ATUALIZAÇÃO:

Options All +MultiViews

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

Warning
Mixing Options with a + or - with those without is not valid syntax and is likely to cause unexpected results.

Para expressar All e MultiViews , você precisaria de duas diretivas:

Options All
Options +MultiViews

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

Options FollowSymLinks Includes MultiViews
    
por 20.01.2017 / 01:52
0

você pode por favor tentar assim: eu 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
    
por 20.01.2017 / 02:08