desenv-web-rp.com

Como implementar a reescrita de URL no meu arquivo .htaccess?

Gostaria de reescrever um URL (Por quê? Consulte esta pergunta .) Para que, em vez de os usuários verem endereços como

labouseur.com/course-compilers.html 

eles podem ver e usar simplesmente

labouseur.com/course-compilers

(Melhor ainda, talvez eu deva reestruturar isso para que seja cursos/compiladores.)

Estou usando um serviço de hospedagem compartilhada baseado em Linux para o meu site, por isso não tenho controle administrativo do servidor, mas tenho controle sobre o .htaccess. As referências que li online pareciam pouco claras para mim, então estou procurando um pouco de clareza e conselhos aqui.

17
Alan

Na verdade, você pode remover .html dos arquivos no servidor e definir configurações no htaccess para que eles sejam exibidos como arquivos html, mas provavelmente não é isso que você está procurando.

Faça isso :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html
13
Rizwan Kassim

Primeiro, verifique se o Apache possui o módulo e se ele é permitido nos arquivos .htacces e, em seguida, adicione:

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

Seu exemplo exigiria

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

Para uma estrutura de diretório de nível único e

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

Para uma estrutura multinível.

Mas tenha cuidado

Se você tem a estrutura

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

As regras de reescrita nos arquivos filho .htaccess serão relativas à pasta pai e você pode entrar em algumas situações --- confusas reescrever o loop. Certifique-se de usar RewriteCond para impedir que eles aconteçam, se puder!

3
Aiden Bell

Além das respostas acima, pode-se usar

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) Permite letras, dígitos com um hífen (-).

(.*) reescreverá cada solicitação independentemente, o que pode impotir outras regras a seguir, causando erro interno do servidor ao acessar.

2
Abhishek Gurjar

Você não precisa usar um arquivo .htaccess para fazer isso. Simplesmente estruture seus arquivos em diretórios e, em vez de usar "labouseur.com/course-compilers.html", apenas nomeie o arquivo index.html e coloque-o em um diretório chamado "compiladores de curso". Então, quando você aponta para esse diretório, o índice é exibido por padrão, mas não será exibido no URL. Então você pode simplesmente escrever seus links como "labourseur.com/course-compilers" e tudo ficará bem.

Não é necessário .htaccess.

1
Joel Glovier