Remova www e .html com um único redirecionamento

1

Estou tendo um problema em que, se um usuário digitar:

www.myurl.com/page.html

eles são redirecionados primeiro para

myurl.com/page.html

e depois para

myurl.com/page

Isso porque eu tenho o seguinte no meu arquivo conf

    #remove www from url
    if ($host ~* ^www\.(.*)) {
        set $remove_www $1; 
        rewrite ^(.*)$ http://$remove_www$1 permanent;
    }

    location  /{

            # removes .html extension
            if ($request_uri ~ \.html($|\?)) {
                    rewrite ^(.+)\.html$ $1 permanent;
            }
    }

Minha pergunta :

Existe uma maneira de eliminar o primeiro redirecionamento para que, se um usuário digitar www.mysite.com/page.html , ele seja redirecionado diretamente para mysite.com/page

    
por jwerre 19.02.2013 / 21:11

1 resposta

2

Você precisa da regra www. para remover o .html , se presente. Você também não deve precisar da instrução if na segunda reescrita:

#remove www from url
if ($host ~* ^www\.(.*)) {
    set $remove_www $1; 
    rewrite ^(.*?)(\.html)?$ http://$remove_www$1 permanent;
}

location / {
    rewrite ^(.+)\.html$ $1 permanent;
}
    
por 19.02.2013 / 21:45