Diretrizes, Dicas, Tabelas, Scripts para se Fazer Redirecionamentos Permanentes (301) em Diversos Servidores



Ruy Miranda



O que é redirecionamento?
Redirecionamentos feitos pelos suportes
Redirecionamentos feitos no painel do site
Alteração manual em servidor web
Redirecionamentos em servidores Windows
Redirecionamentos de arquivos em ASP
Redirecionamentos de arquivos ASP dinâmicos
Redirecionamentos ASP.NET
Redirecionamentos arquivos html ou htm
Redirecionamentos com uso de Meta Refresh
Uso de outro redirecionamentos rápido por javascript
Uso do programa ISAPI Rewrite (Servidores Windows)
Redirecionamentos de arquivos em PHP
Redirecionamentos de arquivos em Coldfusion
Redirecionamentos em servidores Apache
Redirecionamentos com arquivo .htaccess
Redirecionamentos de domínio com www para sem www
Redirecionamentos com htaccess que redirige página dinâmica em php
Redirecionamentos de subdomínio em html
Limite no número de instruções no htaccess
Onde fica 301 e 302 no htaccess?
Redirigir domínio inteiro para a home/página de outro domínio
Redirigir um domínio inteiro ou uma página para outro domínio / pasta de outro domínio
Redirigir uma URL dinâmica para outra estática
Redirigir todos os arquivos de uma pasta php para um único arquivo PHP
Redirigir toda uma pasta para outra pasta
Redirigir um arquivo html para php
Redirigir um subdomínio para a URL
Htaccess me diretórios (pastas)
Htaccess localizados simultaneamente na raiz e diretórios do primeiro, segundo, etc. nível
Redirigir uma URL dinâmica para outra estática
Lidando com servidor Apache sem htaccess


Informação importante

 

Muitos casos de redirecionamentos passaram, a partir de fevereiro/2009, a ser resolvidos de uma maneira mais simples. Trata-se de escolher um URL entre dois ou mais URLs que apresentam conteúdos idênticos ou muito semelhantes, dentro do mesmo site, e colocar nos head dessas páginas uma instrução chamada rel="canonical" que indica o URL escolhido. Isso resolve os problemas de duplicidades dentro do site. As páginas idênticas não são redirigidas, mas não são incluídas nos indexes do Google, Yahoo e MSN. Veja mais detalhes em URLs Canonizadas. Para obter as informações oficiais, acesse:
-- http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html.
-- http://www.ysearchblog.com/2009/02/12/fighting-duplication-adding-more-arrows-to-your-quiver/
-- http://www.bing.com/community/blogs/webmaster/default.aspx

Encontre seu script, copie e cole. Fazer redirecionamentos permanentes, também chamados de redirecionamentos 301 ou Redirect 301, ou redirecionamentos temporários (302), é fato corriqueiro na otimização de sites. É mais comum quando o site sofre mudanças estruturais ou de páginas ou de endereços ou de conteúdos. Nesta página a tarefa fica facilitada. Muitas vezes o dono do site só toma conhecimento da necessidade de se fazer um redirecionamento em situações aflitivas, como por exemplo, ao mudar de servidor e ver, logo em seguida, seu site perder posições. Esta página é, sobretudo, para socorrê-lo em tais ocasiões.

.

O Que É – O redirecionamento consiste na colocação de instruções, em linguagem de máquina, na própria página ou em algum arquivo específico ou no próprio servidores web, pelas quais sites inteiros ou pastas ou arquivos são encaminhados para endereços diferentes. Estas instruções são pequenas e usualmente chamadas de scripts. Elas são colocadas na página que se pretende redirecionar ou em arquivos específicos, chamados arquivos de redirecionamento.

Redirecionamento na Página – Em certos servidores a instrução é feita na própria página que se quer redirecionar. O script é colocado no topo da página ou nas meta tags.

Arquivo de redirecionamento – Em certos servidores é necessário fazer um arquivo à parte. Nele vai o script, que pode ser uma linha com poucos caracteres, ou uma enorme lista de caracteres. O mais comum desses arquivos é o .htaccess, por ser usado na maioria dos servidores Apache, e o Apache está instalado em cerca de 50% das máquinas.

Trabalho Permanente – O trabalho desta página é permanente porque são tantas as variávais envolvidas e tantas as modificações e atualizações feitas nos servidores, que sempre existe algum ajuste ou acréscimo a ser feito. Nesse processo conto com a colaboração voluntária de João Luiz Savioli Filho, do site www.studioserver.com.br, o qual tem longa esperiência com servidores e Hospedagem de Sites e, conseqquentemente, de redirecionamentos. assim como com a colabração de visitantes desta página. Se você desejar ver aspectos teóricos do assunto, consulte os links no final desta página e outros na Internet.

Esta página pode conter erros. Se encontrar algum, queria fazer o favor de me comunicar pelo email contato-oti@otimizacao-sites-busca.com. Se por ventura o seu problema de redirecionamento não estiver previsto aqui, queira informar pelo mesmo email – quando for possível ele será inserido na lista de scripts.
Tenha em mente que todo redirecionamento, depois de feito, deve ser testado, e em seguida retestado com o cache limpo. E que a presença de frames pode comprometer o redirecionamento.

Há vários locais na Internet em que você pode testar seus redirecionamentos. Aqui está a sugestão de um deles: Testar Redirecionamentos

Redirecionamentos Feitos Pelo Suporte

Esse redirecionamento consiste em encaminhar uma solicitação ao suporte da hospedagem para que o serviço seja feito. A despeito de parecer uma coisa interessante, em geral traz muita dor de cabeça, posto que a maioria dos serviços de hospedagem oferece suporte deficiente. Há, contudo, uma variação muito desejável: aquela em você faz o redirecionamento normalmente e, em caso de dificuldade, o suporte entra para resolver o problema.

Redirecionamentos no Painel do Site

Oferecer redirecionamento pelo painel começou por volta de 2006 e foi tão bem recebido que sua oferta, pelos serviços de hospedagem, está cada vez mais freqüente. E de fato eles nos livram de muitas dores de cabeça. Em geral isto é encontrado numa área de gerenciamento ou serviços.

Forma de operar:

-- Acessar a área própria no painel
-- Seguir as instruções ali existentes
-- Assinalar redirecionamento permanente
-- Checar na Internet se o redirecioamento feito está funcionando.

Existem algumas variações ou pequenas diferenças nas formas de operar os redirecionamentos via painel. Mas, em geral, elas são auto-explicativas e simples.

Vantagens – A grande vantagem de se operar estes redirecionamentos por esta via é o menor risco de erro na execução e a dispensa de se dominar o conhecimento de scripts ou de se ter a posse dos scripts próprios.

Veja um exemplo bastante ilustrativo de redirecionamento num painel:

Observe que o nome do seu domínio entra no lugar de exemplo. Observe ainda que:

-- basta você colocar adiante da sua URL básica o endereço antigo ou que deve desaparecer;
-- o endereço do destino ("to") lhe dá as alternativas de http, ftp, https;
-- vem, em seguida, a área onde você vai escrever o endereço de destino, que pode ser em seu site ou em outro site;
-- entre as coisas que você pode marcar a seguir, está o "A permanent redirection for this resource", ou seja, um redirecionamento permanente

Se houver algum erro na grafia, o progrmama rejeita o redirecionamento. Em outra página vai aparecer este e outros redirecionamentos que você fez. Nela você pode apagar qualquer um, que por ventura apresente erro. simples, não é?

Desvantagem – Quanfo o redirecionamento envolve alguma complexidade, este serviço pode não ser possível em certos painéis.

Advertência – Alguns serviços de hospedagem de sites oferecem esse redirecionamento mas, quando você precisar, pode ter a desagradável surpresa de só poder fazê-lo para outro site. Por vezes isto é uma limitação do plano de hospedagem e se resolve com a mudança no plano.

Dica: Ao contratar um serviço ou plano de hospedagem que ofereça redirecionamentos via painel, procure saber o alcance desse redirecionamento e se há suporte rápido em caso de necessidade.

Alteração Manual no Servidor Web

Existe uma maneira de se fazer intervenções nos servidores web, inlcusive para os redirecionamentos, que consiste em escrever instruções no próprio servidor, via acesso chamado Shell. É preciso conhecimento específico e muita experiência com servidores para fazer este tipo de intervenção; por este motivo o redirecionamento por esta via não será informado nesta página.

Uma variação em certos servidores é o uso de um programa na interface do servidor; nele as operações são mais simplificadas porque se parece com um painel comum, mas é possível fazer mudanças mais complexas ali. Um exemplo disto é o Webmin, um programa que permite a você alterar coisas no servidor sem usar o acesso Shell. Mas este programa não apresenta a mesma facilidade de um painel comum.

REDIRECIONAMENTOS EM SERVIDORES WINDOWS

Servidores Windows IIS

-- ARQUIVOS em ASP:

Os arquivos ASP estáticos (para diferenciar dos dinâmicos) podem ser redirecionados por script inserido no topo da página, antes das informações da versão do html. Um script típico tem a seguinte redação:

O destino é a página índice do site:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dominio.com.br/"
%>

O destino é uma página contida numa pasta:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dominio.com.br/pasta/pagina-de-destino"
%>

O destino é um arquivo numa pasta chamada B:
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.dominio.com.br/pastaA/PastaB/pagina-de-destino"
%>

O destino é a home:
---Adredir.asp---
<% Response.Redirect(Request.QueryString("url")) %>

Redirige endereço sem www para com www:
<%
select case Request.ServerVariables("SERVER_NAME")
case "dominio. com .br"
response.redirect("http://www.dominio. com .br")
end select
%>


-- ARQUIVOS em ASP DINÂMICO:

Vou transcrever um exemplo de redirecionamento TEMPORÁRIOS que funciona como uma luva para páginas em ASP dinâmicas. Ele foi ofericido gratuitamente por Leonardo Lopes, diretor e porgramador da Inter Amplitude, que cria sites e desenvolve programas personalizados.

<%
response.buffer = true

select case request("id_menu")
case 10
link = "arquivoA.asp"
case 3
link = "arquivoB.asp"
case 2
link = "arquivoC.asp"
case 1
link = "arquivoD.asp"
case 11
link = "arquivoE.asp"
case 13
link = "arquivoF.asp"
case 17
link = "arquivoG.asp"
case else
link = "default.asp"
end select

response.redirect(link)
%>

Esta seqüência foi colocada num arquivo chamado conteudo.asp, na pasta onde estavam os endereços que seriam mudados. Observe que cada URL é representada pela terminação, precedida de informações como menu, case, link. Este redirecionamento depende de uma articulação com o banco de dados, no qual se acham várias definições dos parâmetros do script. Todos os arquivos foram redirigidos para a raiz do site.

Entretanto, quando se trata de redirecionar URL gerada dinâmicamente para URL dinâmica, as coisas ficam mais complicadas, como veremos.

Mande um Script
Você tem algum script de redirecionamento permanente para inserir aqui e que possa ser útil a outras pessoas? Mande-o e, se for incluído, seu site será citado com um link ativo.

-- ASP.NET:

Redirecionar uma página para outro endereço:

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.nova-pagina.com.br");
}
</script>

-- ARQUIVOS em HTML ou HTM:

--- Uso de Meta Refresh – O redirecionamento pode ser feito por uma meta tag chamada Meta Refresh. Ele é um redirecionamento rápido. Ver discussão sobre meta refresh. Atributos da meta tag:

<meta http-equiv="refresh" content="0; url="http://www.nomedodominio.com.br/index.html">

Content é o tempo em segundos que levrá para haver refresh. No caso, 0 segundo.
URL é o endereço do destino (no caso, uma página index.html). Não é recomendado usar 0 (zero) segundo, pois os robots precisam acessar as metas da página. Há quem recomende 5 segundos. Mas este tempo é muito longo e retarda o redirecionamento, o que se constitue em um estorvo para o robot. Na verdade ninguém sabe qual é o tempo ideal.

A página de destino pode ficar com URL absoluto (como no exemplo acima), ou relativo, assim:

. <meta http-equiv="refresh" content="0; url=index.html">

--- Uso de outro redirecionamento rápido por javascript

Um outro redirecionamento rápido consiste num pequeno scrip em qualquer parte do head, mas recomenda-se colocá-lo bem no começo, antes mesmo do título ou qualquer outra meta tag. O script é o seguinte:

<script language="javascript"><!--
location.replace("nomedapagina.html")
//-->
</script>

Aqui também pode-se usar URl absoluto ou relativo.

--- Uso de um programa chamado ISAPI Rewrite. (Pode ser usado também em página asp)


Este programa é instalado no servidor. Mas nem todos os servidores o têm. É preciso ver na configuração ou obter informação do suporte. Quando o programa está instalado, é necessário pedir a ativação dele para o seu site.

Quando ele não está instalado, pode ser comprado pelo proprietário do site e instalado no servidor. Existe uma versão gratuita, não-comercial, de ação muito limitada. A instalação requer conhecimentos básicos de instalção de programas diretamente no servidor.

Para funcionar, o script terá de ser inserido num arquivo bloco de notas (terminação txt) e carregado no servidor. Uma vez no servidor, a terminação txt precisa ser substituída pela terminação ini.

Este programa permite praticamente todos os redirecionamentos, mas é bastante complexo e de difícil assimilação.

Redirecionar arquivo – Veja o script que segue, o qual permite redirecionar um arquivo da raiz para uma pasta do mesmo site.

[ISAPI_Rewrite]

RewriteCond Host: ^dominio\.com.br
RewriteRule /arquivonaraiz\.html?(.+) /pasta/arquivo.index.html [RP]

Redirecionar domínio sem www e extensão html – Pelo script que se segue, você pode fazer duas coisas: redireciona http://dominio.com.br (observe que não tem www) para http://www.dominio.com.br, e ainda, a terminação index.html para uma barra no final.

[ISAPI_Rewrite]

RewriteCond Host: ^dominio\.com.br
RewriteRule (.*) http\://www\.dominio\.com.br$1 [I,RP]
RewriteRule /index\.html?(.+) / [RP]

[I,RP] - I significa ignorar a situação anterior do script; RP significa redirecionamento permanente. Se desejar fazer um redirecionamento temporário, use [R].

[RP] significa redirecionamento permanente, mas leva em consideração a situação anterior do script. Se desejar fazer um redirecionamento temporário, use [R].

Redirecionar domínio sem www, extensão html e arquivo, para domínio com www e sem index.htm, acrescido do redirecionamento de um arquivo qualquer para uma pasta:

ISAPI_Rewrite

RewriteCond Host: ^dominio\.com.br
RewriteRule (.*) http\://www\.dominio\.com$1 [I,RP]
RewriteRule /arquivoqualquer\.html?(.+) /pasta/arquivoqualquer.html [RP]
RewriteRule /index\.html?(.+) / [RP]

Elimina uma pasta e todo o seu conteúdo e redirige para um nível abaixo:
[ISAPI_Rewrite]
<%
'Permanet Redirect
Response.Status = "301 Moved Permanently"
case
"www.dominio.com.br/PastaA/PastaB/arquivo.htm"
response.redirect
"http://www.dominio.com.br/PastaB/arquivo.htm"
Response.End
%>

Elimina uma pasta e redirige o arquivo index para a raiz:
[ISAPI_Rewrite]

RewriteCond URL ^/BR/.*
RewriteRule (.+) http\://www\.dominio\. com .br$2 [RP]

Redirigie um domínio para outro:
[ISAPI_Rewrite]

RewriteCond Host: (www\.)?domain1\. com.br
RewriteRule (.+) http\://www\.domain2\. com.br $1 [R]

Redirige um domínio para outro mas mantém o link ativo funcionando:
[ISAPI_Rewrite]

RewriteCond Host: (www\.)?domain1\. com.br
RewriteRule (?!/domain1)(.*) /domain1$2 [I]

Redirigir uma página antiga asp para uma página nova asp:
[ISAPI_Rewrite]

RewriteRule /pagina-antiga.asp http://www.dominio. com /pagina-nova.asp [I,O,RP,L]

Observação: A despeito dos redirecionamentos acima pelo ISAPI Rewrite estarem colocados separados, só se faz um arquivo para um site. Isto significa que várias instruções podem ser dadas no mesmo arquivo. Vamos aumentar um dos exemplos acima:
ISAPI_Rewrite]

RewriteCond Host: ^dominio\.com.br
RewriteRule (.*) http\://www\.dominio\.com$1 [I,RP]
RewriteRule /arquivoqualquer\.html?(.+) /pasta/arquivoqualquer.html [RP]
RewriteRule /pagina-antiga.asp http://www.dominio. com /pagina-nova.asp [I,O,RP,L]
RewriteRule /paginaA\.html?(.+) /paginaB.asp [I,RP]
RewriteRule /index\.html?(.+) / [RP]
ETC

-- ARQUIVOS em PHP:

É preciso saber se seu servidor Windows suporta arquivos php.
--- Um ou mais arquivos são redirigidos a partir de uma página index.php.
--- A instrução é colocada no topo da página antes de qualquer coisa que apareça nela.

Exemplos:

Domínio sem www é redirigido para dominio com www:

<?
$host = $_SERVER['HTTP_HOST'];
if ( !strstr($host,"www.") ) {
header("Location: http://www.$host/");
}

?>
No caso, se alguém digitar domínio sem www, vai aparecer o endereço com www.

Domínio sem www é redirigido para domínio com www e sem extensão html:

<?
$host = $_SERVER['HTTP_HOST'];
if ( !strstr($host,"www.") ) {
header("Location: http://www.$host/");
}
else {
$fp=fopen("index.html", "r");
while(!feof($fp)) {
echo fgets($fp,4096);
}
fclose($fp);
}
?>
No caso, se alguém digitar:

dominio.com.br (mesmo sem http) ou
dominio.com.br/index.html (com ou sem http),

será redirecionado para http://www.dominio.com.br/

É possível, no mesmo arquivo index.php, fazer vários redirecionamentos no site.

Os arquivo PHP podem ser redirecionados por script inserido no topo da página:

O destino é a página índice do site:
<?
phpheader(”HTTP/1.1 301 Moved Permanently”);header(”Location:http://www.dominio.com.br/”);
?>


O destino é uma página contida numa pasta:
<?
phpheader(”HTTP/1.1 301 Moved Permanently”);header(”Location:http://www.dominio.com.br/pasta/pagina-de-destino”);
?>

O destino é um arquivo numa pasta chamada B:
<?
phpheader(”HTTP/1.1 301 Moved Permanently”);
header(”Location:http://www.dominio.com.br/pastaA/pastaB/pagina-de-destino”);
?>

-- ARQUIVOS em COLDFUSION:

O destino é outro domínio:

<.cfheader statuscode=”301″ statustext=”Moved permanently” / >
<.cfheader name=”Location” value=”http://www.novodominio. com .br” / >

Colocar a instrução no topo da página antes de qualquer outra coisa.

O destino é um arquivo dentro de uma pasta do próprio site:

<cfheader statuscode=”301″ statustext=”Moved permanently” />
<cfheader name=”location” value=”http://www.dominio.com.br /pastaqualquer/” />

Colocar a instrução no topo da página antes de qualquer outra coisa.


REDIRECIONAMENTOS EM SERVIDORES APACHE

-- ARQUIVO HTACCESS:

Um servidor Apache é, na essência um programa instalado numa máquina e que executa muitas funções. O Apache precisa ser configurado para que os redirecionamentos sejam feitos por meio de um arquivo que se chama htaccess; sua terminação é em txt , ele é grafado com um ponto antes, assim: .htacess.txt. O nome deriva de hipertext access, ou seja um arquivo de acesso. Neste arquivo colocamos os scripts ou códigos.

Os scripts têm aplicações diversas, mas aqui abordaremos apenas aqueles que têm aplicação nos redirecionamentos em servidores Apache.

Outra característica importante desses arquivos é a possiblidade de mudarmos a configuração do servidor de forma descentralizada. Alterar configurações do Apache (ou qualquer outro servidor) é tarefa complexa que requer tempo e conhecimento específico. Dizemos que esta é uma alteração centralizada. Mas o Apache pode ser configurado de forma a seguir as instruções do arquivo htaccess. Com isso, ao invés de mexer no núcleo do servidor, mexemos apenas num aquivo muito simples, descentralizado.

Como fazer o arquivo htaccess – O arquivo é feito com um bloco de notas vazio. Ele deve ser transferido para o seu editor de site, e colocado na raiz do site, e por fim, receber o nome de .htaccess.txt. (Observe o ponto antes do h). Depois de receber os scripts ele deve ser carregado para o servidor. Alguns sistemas operacionais não permitem carregar um arquivo precedido de um "." simplesmente - neste caso você deve colocar qualquer coisa antes do ponto, carregar e depois apagar a qualquer coisa que escreveu antes do ponto.

Ferramenta poderosa – "O arquivo htaccess é uma ferramenta poderosa" – eu li esta informação muitas vezes quando tomei contato com esse recurso. Com o tempo, após muitas experiências com vários redirecionamentos, vi que tinham razão os que diziam isso. Ademais, é, na maiora das vezes, muito simples. Ele não funciona num servidor Windows.

Exemplo de código no arquivo htaccess em que um domínio sem www é redirigido para o mesmo domínio com www:

(Escreva no bloco de notas em branco que foi intitulao de ,htaccess.txt:)

RewriteEngine On

RewriteCond %{HTTP_HOST} ^dominio.com.br [NC]
RewriteRule ^(.*)$ http://www.dominio.com.br/$1 [L,R=301]

Observe que:
-- A expressão RewriteEngine On significa que a função de redirecionamento está ativada no servidor (condição para que o script no arquivo htaccess funcione).
-- NC indica ao seu servidor que a notação feita não é sensível a maiúsculas ou minúsculas; ou seja, deve tratar letras maiúsculas e minúsculas da mesma forma.
-- Neste código, o domínio sem www é redirecionado para domínio com www.
-- O conjunto (*.)$ indica que não existe nada depois de http://dominio.com.br.
-- O conjunto $1 indica que não haverá nada depois de http://www.dominio.com.br
-- L indica que é a última linha - ou seja, a declaração feita não continua nas linhas posteriores. Isto é útil em casos de conflitos no código. Se colocamos L em todas as declarações de redirecionamento, circunscrevemos a declaração àquela linha e impedimos que um eventual conflito se propague.
-- R significa Redirecionamento.
-- Quando há espaço no código, ele é simples; se for duplo, não funciona.

Importante: Esse script, e outros que se seguem, pode não funcionar corretamente por vários motivos. Antes de investigar os motivos e corrigi-los, você pode tentar o script seguinte:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.dominio\.com.br$
RewriteRule (.*) http://www.dominio.com.br/$1 [R=301,L]

Outro exemplo de código no arquivo htaccess, semelhante ao anterior, acrescido de uma linha de código:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^dominio.com.br [NC]
RewriteRule ^(.*)$ http://www.dominio.com.br/$1 [L,R=301]
RewriteRule ^pastaA/arquivoA.html http://www.domínio.com.br/pastaB/arquivoqualquer.html [R=301,L]

Observe que é o mesmo código do exemplo anterior, acrescido de mais uma linha de código. Isto significa que RewriteEngine On só precisa ser escrito uma vez e que várias instruções podem ser colocadas no arquivo. Neste caso o arquivoA na pastaA foi transferido para um arquivoqualquer na pasta B.

Redirecionamento de um arquivo para outro usando código sem alterar apresentação da home:

RewriteEngine On

RewriteRule ^arquivoA.html$ http://www.dominio.com.br/arquivoB.html [L,R=301]

Este é um código de uma linha com instruções mais completas.

Redirecionamento de um ARQUIVO para outro usando código mais suscinto:

RewriteEngine On

Redirect 301 /paginaA.html http://www.dominio.com.br/paginaB.html

Neste caso o redirecionamento é feito sem a instrução contida na letra L da situação anterior. .

Pode-se ter sequênciias de instruções completas misturadas a instruções sucintas.


Redirecionamento de uma PASTA para outra usando código mais suscinto:

RewriteEngine On

Redirect 301 /pastaA/ http://www.dominio.com.br/pastaB/

Neste caso a página que vai se abrir será a index, não importa se é em html, php, asp, etc.

Redirecionamento de uma PASTA para outra usando código completo:

RewriteEngine On

RewriteRule ^/pastaA/$ http://www.fiber.ind.br/pastaB/ [L,R=301]

Redirecionar um domínio para outro domínio:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.novodominio.com.br/$1 [R=301,L]

Outro exemplo de código no arquivo htaccess, semelhante ao primeiro exemplo acima - a diferença é que na terceira linha do código você redirige a página inicial com index para sem index:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^dominio.com.br [NC]
RewriteRule ^(.*)$ http://www.dominio.com.br/$1 [L,R=301]
RewriteRule ^index.html / [R=301,L]

Observe que a página index deste exemplo tem extensão html, mas ela pode ter qualquer extensão - html, htm, php.

Este redirecionamento é necessário em algumas situações, particularmente no Google. Não se sabe porque, na área de webmasters, ele começa a informar que há duplicidade de meta tags e de títulos no site, e quando você vai ver, trata-se de / e /index.html (htm, php). Se você não fizer o redirecionamento, o site poderá perder posições por causa deste simples detalhe. Ainda não está claro para mim o que leva a isto porque num conjunto de sites acompanhados na área de webmasters, o aviso aparece para alguns sites e não aparece para outros. Se o servidor for Windows, o redirecionamento precisa ser feito também (por outro processo, naturalmente).

Looping – O redirecionamento

RewriteRule ^index.html / [R=301,L]

em geral gera looping, ou seja, um endereço fica apontando para o outro indefinidadmente e a página não é exibida.

Dica

Havendo looping em arquivo html, basta fazer uma manobra simples. Se seu arquivo da página inicial é index.html, faça uma cópia dele, coloque nela a terminação htm, carregue no servidor. Neste você deleta o arquivo index.html.

Em tal situação o pedido pelo arquivo index.html é substituído pelo arquivo index imediato, neste caso, index.htm e o looping não aparece. Observe que no redirecionamento o arquivo que fica para ser redirecionado é o index.html.

Quando o arquivo é php dá um pouco mais de trabalho. Você precisa fazer uma adaptação no script. O redirecionamento da página inicial sem www para www é acrescido de duas linhas no código, o qual fica assim:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^dominio.com.br
RewriteRule ^(.*)$ http://www.dominio.com.br [L,R=301]
RewriteRule ^index.php$ / [R=301,L]
RewriteRule ^index.html$ /inicial.php

-- Observe que na terceira linha, a página index.php é redirigida para a página terminada em barra, tal como no redirecionamento já descrito. Na quarta linha, uma suposta página index.html (carregada em branco para o servidor) é redirigida para uma página que se convencionou chamar aqui de inicial.php, mas que pode receber qualquer outro nome e mantenha a terminação php.

-- Observe também que na quarta linha não é informado que o redirecionamento é permanente ou de qualquer outra natureza.

-- O arquivo index.html fica totalmente em branco; não tem uma única palavra escrita nele, mas precisa ser carregado para o servidor.

-- O arquivo inicial.php tem o mesmo conteúdo de index.php.

-- O arquivo index.php deve ser deletado no servidor.

Dica 2

Se o seu serrvidor não obedecer o camando, faça uma pequena mudança no script para:

RewriteRule ^index.php$ / [R=301,L]
RewriteRule ^/index.htm$ /inicial.php

Observe que a diferença foi apenas o acréscimo de uma barra. Este fenômeno é observado no dia-a-dia dos redirecionamentos. Por vezes um script não funciona num dado servidor e é preciso pesquisar para ver que detalhe deve ser acrescido ou tirado. Uma explicação para isto são pequenas diferenças na configuração do servidor. ´

Dica 3

Se você tentou os 3 scripts, e só o terceiro funcionou, e ainda, se depois de algum tempo ele parou de funcionar inexplicavelmente, tente o primeiro de todos, o que deu looping. Ele pode funcionar! Em seguida, durma-se com este barulho.

Dica 4 - Arquivos HTML

Tudo o que foi dito sobre sobre arquivos php se aplica aos arquivos em html toda vez que o redirecionamento direto resultar em looping.

Descrição Sintética da Estratégia

A estratégia pode ser resumida da seguinte forma:

1. O arquivo original é regidirido para o domínio terminando em / e com a instrução de redirecionamento permanente ou 301 no final.
2. Um arquivo index, com terminação diferente do arquivo original, em branco, é carregado para o servidor.
3. O conteúdo do arquivo original (item1) é colocado num arquivo que recebe um nome qualquer e a mesma terminação do arquivo orginal.
4. O arquivo em branco (item 2) é redirigido para o arquivo do item 3.
5. O arquivo original é deletado no servidor.

Como já disse, parece que os servidores podem ter pequenas diferenças nas configurações. Isto requer, muitas vezes, que você realize vários testes tipo ensaio e erro. Ou seja, você faz uma pequena mudança no script e testa; se não deu certo, volta com ela, faz mudança em outra parte e testa; se não deu certo, volta com ela, e assim por diante, incluindo-se mudanças em duas ou mais partes do script.


Código no arquivo htaccess, que redirige o domínio com www para SEM www:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.dominio.com.br [NC]
RewriteRule ^(.*)$ http://dominio.com.br/$1 [L,R=301]

Código no arquivo htaccess, que redirige o domínio com www para outro domínio com WWW:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.dominio.com.br [NC]
RewriteRule ^(.*)$ http://www.novodominio.com.br/$1 [L,R=301]

Neste caso você deve transportar todos os arquivos do domínio atual para o novo domínio.

Se não funcionar, tente:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.dominio\.com.br$
RewriteRule (.*) http://www.novodominio.com.br/$1 [L,R=301]

Código no arquivo htaccess, que redirige o domínio com www para SEM www:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.dominio.com.br [NC]
RewriteRule ^(.*)$ http://dominio.com.br/$1 [L,R=301]

Código no arquivo htaccess, que redirige o domínio com www para novo domínio com www e, ao mesmo tempo, redirige o atual sem www para o novo com www:
RewriteEngine On

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.dominio\.com.br$
RewriteRule (.*) http://www.novodominio.com.br/$1 [L,R=301]
RewriteCond %{HTTP_HOST} !^dominio\.com.br$
RewriteRule (.*) http://www.novodominio.com.br/$1 [L,R=301]

Os arquivos devem ser transferidos do atual para o novo, como informado acima.

Observe que é possível duas instruções RewriteCond.

Código no arquivo htaccess, que redirige o domínio sem www para novo domínio sem www e, ao mesmo tempo, redirige o atual com www para o novo sem www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^dominio\.com.br$
RewriteRule (.*) http://novodominio.com.br/$1 [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.dominio\.com.br$
RewriteRule (.*) http://novodominio.com.br/$1 [L,R=301]

Código no arquivo htaccess que redirige PÁGINA DINÂMICA em php de loja virtual, de um produto de uma categoria para outra categoria, dentro do mesmo site:

RewriteRule ^/produto.php?cod=x&nome=nome-do-produto&cat=nome ou número da categoria http://www.nome-dominio.com.br/produto.php?cod=x&nome=nome-do-produto&cat=nome ou número da outra categoria&%1 [L,R=301]

Observar que tem estes símbolos logo depois da categoria: &%1

Este redirecionamento funciona muito raramente, pois os robots lidam mal com esses símbolos de URLs dinâmicas. Até mesmo a navegação dos robots por elas, assim como a indexação das mesmas, é precário. A alternativa é tranformá-las em URLs amigáveis aos robots, ou estáticas.

Código no arquivo htaccess que redirige SUBDOMÍNIO em HTML para o domínio com www:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^dominio\hospedagemdodominio\.com\.br
RewriteRule ^(.*)$ http://www\dominio\.com\.br/$1 [R=permanent,L]

'

Código no arquivo htaccess que redirige, sucessivamente, SUBDOMÍNIO em HTML para o domínio com www, e domínio sem www para domínio com www:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^dominio\hospedagemdodominio\.com\.br
RewriteRule ^(.*)$ http://www\dominio\.com\.br/$1 [R=permanent,L]

RewriteCond %{HTTP_HOST} ^dominio\.com\.br
RewriteRule ^(.*)$ http://www\.dominio\.com\.br/$1 [R=permanent,L]

Observe que R=permanent é o mesmo que R=301.

Quando o access não funciona ou dá instabilidades nos redirecionamentos:

Esta é uma situação muito complicada para quem não tem acesso ao servidor e suas configurações. Isto pode ocorrer em qualquer sistema operacional da família UNIX. Como proceder?
Dica:

Experimente Listar os redirecionamentows da seguinte forma:
redirect 301 /arquivoqualquer1.html http://www.dominio.com.br/arquivoqualquer5.html
redirect 301 /arquivoqualquer12.html http://www.dominio.com.br/pastaqualquerA/arquivoqualquer18.html
redirect 301 /pastaqualquerA/arquivoqualquer6.html http://www.dominio.com.br/arquivoqualquer14.html
redirect 301 /pasta qualquerF/arquivoqualquer9.html http://www.dominio.com.br/pastaqualquerG/subpastaqualquerG-1/arquivoqualquer.html

Observe:
-- Dispensa cabeçalho
-- Não há necessidade de informar o número de redirecionamentos
-- Não há limite para o número de redirecionamentos

Como todos os demais casos, se for usar, faça um teste antes de rodar em definitivo.

Limite no número de instruções:
Por convenção o número máximo de redirecionamentos num arquivo htaccess é 10. Se houver necessidade, podemos passa para n, com a seguinte instrução:

RewriteOptions MaxRedirects=n

Redirecionamentos funcionam para umas URLs, para outras não

Isso é relativamente comum em arquivos htaccess longos, por exemplo, mas de 20 redirecionamentos. O problema pode ser resolvido colocando-se o número de redirecionamentos como indicado acima. Não é necessário colocr todo o cabeçalho como ocorre nas instruções RewriteRule - basta informar o número de URLs.

Todos os redirecionamentos entram em looping.

Em geral isso decorre da existência de um, dois, três ou mais redirecionamentos que entram em looping. Os demais redirecionamentos ficam "contaminados". A retirada dos redirecionamentos que sabidamente se convertem em looping resolve o problema.

Tanto no caso dos loopings como no de redirecionamentos funcionarem para umas URLs, para outras não, é preciso considerar a influência de outros fatores, como a configuração do arquivo htaccess no servidor. Na ocorrência de muitos desacertos com esse arquivo é melhor dar um "aperto" na hospedagem para checar a configuração.

Exemplo de arquivo htaccess com mais de 10 instruções; digamos que sejam 14:
RewriteEngine On
RewriteOptions MaxRedirects=14

RewriteCond %{HTTP_HOST} ^dominio. com.br [NC]
RewriteRule ^(.*)$ http://www.dominio. com.br /$1 [L,R=301]
RewriteRule ^pastaA/arquivoA.html http://www.domínio.com.br /pastaB [R=301,L]
(Neste exemplo seria possível acrescentar mais 12 instruções)

Vários comandos numa única linha:
Veja que há uma seqüência de comandos numa única linha:
RewriteRule ^paginaantiga.html http://www.dominio.com.br/paginanova.html

Note:
-- Na primeira parte aparece uma instrução: Redirigir seguido de 301 (indica permanente; se for um redirecionamento temporário, o número é 302).
-- Na segunda parte vem o que se quer redirecionar; neste caso, não incluímos a parte inicial da URL, mas apenas a parte que será redirecionada.
-- Na terceira parte vem a URL de destino.

Onde fica o 301 ou o 302?
Os números 301 e 302 que caracterizam, repectivamente, o redirecionamento definitivo ou permanente, e o redirecionamento temporário, podem ser colocados em mais de um lugar no código. O local exato depende muito do tipo de instrução - por exemplo, se ela é simples, pode vir logo na primeira etapa da linha.

Nos exemplos que se seguem, fica implícito que no arquivo htaccess existem instruções iniciais, como nos exemplos acima.

Redirigir um domínio inteiro para a home de outro domínio:
RewriteRule / http://www.outrodominio.com.br

Redirigir um domínio inteiro para uma página de outro domínio:
RewriteRule / http://www.outrodominio.com.br/arquivoc.html

Redirigir um domínio inteiro ou uma página do mesmo para outro domínio ou uma página de outro domínio:
Por exemplo, dominioA.com.br/arquivo1.htm para domínioB.com.br/arquivo1.htm. A instrução é colocada no htaccess do domínio A

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.dominioB.com.br/$1 [R=301,L]

Uma URL dinâmica para um arquivo estático:
RewriteRule ^arquivo.jsp? id =(.*)$ /arquivo.html [L,R=301]

Todos os arquivos em php de uma pasta para um único arquivo php:
RewriteRule ^pastacomarquivos(.*)$ /arquivo.php [L,R=301]

Toda uma pasta para outra pasta:
RewriteRule /pastaantiga http://www.dominio.com.br/pastanova

Neste caso, os arquivos contidos na pasta antiga são também redirecionados para os arquivos respectivos na pasta nova. Se por acaso, a pasta antiga contiver arquivos que não aparecem na pasta nova, os redirecionamentos serão feitos, mas darão erro 404.

Mudança na extensão: Redirigir um arquivo html para php:
RedirectMatch 301 (.*)\.html$ http://www.dominio.com.br$1.php

Seqüência de arquivos e pastas:
RewriteEngine On

RewriteRule /pastaA/arquivoA.html http://www.domínio.com.br/pastaB/arquivoqualquer.html [R=301,L]
RewriteRule /arquivoqualquer.html http://www.dominio.com.br/pastaqualquer/arquivo.html [L,R=301]
RewriteRule /pastavelha/ http://www.dominio.com.br/pastanova/ [L,R=301]
RewriteRule /pastavelha/arquivovelho.html http://www.dominio.com.br/pastavelha/arquivonovo.htm [L,R=301]
RewriteRule /pastaA/pastaB/pastaC/arquivo.html [L,R=301]
http://www.dominio.com.br/pastaA/pastaB/arquivoqualquer.htmll[L,R=301]


Dicas

-- Extensões diferentes - você pode redirigir num mesmo arquivo htaccess arquivos em html e arquivos em php.

-- Colocação e retirada da terminação txt - Para carregar o arquivo htaccess no servidor, ele precisa ter a terminação txt, assim: .htaccess.txt. Mas, uma vez no servidor, para funcionar, você terá de retirar a terminação txt, deixando apenas .htaccess

-- Alterar arquivo htaccess que existe no servidor - Se você tiver de alterar o arquivo htaccess no servidor, deverá carregá-lo, apagar o anterior e, em sguida, retirar a extensão txt.

-- Erro Interno no Servidor - Determinados erros podem impedir o aparecimento de qualquer página do site na tela, com o aviso de Erro Interno no Servidor. Não se preocupe: basta corrigir o erro e tudo volta ao normal. Se você não estiver encontrando o erro, basta voltar o arquivo htaccess para a situação anterior à mudança.

-- Fazer Cópias - Uma providência que pode evitar muitos transtornos é fazer cópias dentro do próprio arquivo htaccess de tudo aquilo que está sendo alterado. A cópia é precedida pelo símbolo #. Digamos que você vai modificar uma instrução. Então você faz uma cópia dela e cola abaixo das outras instruções com este símbolo. Por exemplo, ela pode ficar assim:

#RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]

Havendo este símbolo, o robot não lê e tampouco pode seguir a instrução. Se você precisar dela em outro momento, ela se acha ali em baixo. Você pode deixar tantas cópias quantas desejar ou precisar.

-- Símbolos no final - Em muitas situações é dispensável colocar no final da instrução /$1, como acima: RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]. ela pode funcionar apenas com RewriteRule ^(.*)$ http://www.dominio.com [L,R=301]



Redirecionamento de Sub-domínio: 301 de um Sub-domínio para o URL

Neste caso você quer redirigir um subdomínio do seu domínio para o URL pleno, de sorte que o nome que existe no subdomínio passe a figurar como uma extensão do domínio..

RewriteEngine on
RewriteBase /

RewriteCond %{http_host} !^subdominio..seudominio.com.br$ [nc]
RewriteRule ^(.*)$ http://www.seudominio.com.br/pasta/$1 [r=301,nc,L]


-- HTACCESS EM DIRETÓRIOS / PASTAS

O arquivo .htaccess.txt é habitualmente colocado na raiz do site. Nessa colocação podemos fazer todos os redirecionamentos do site, em qualquer nível, ou seja, podemos redirecionar arquivos que se encontram no mesmo nível ou em níveis diferentes. Vejamos inicialmente o redirecionamento de uma URL para outra, ambas no diretório da raiz. O diretório da raiz, ou simplesmente raiz do site, vem representado pela pasta chamada public_html ou httpdocs ou Web, etc, conforme o servidor. Dizemos também que colocamos ali se encontram no primeiro nível.

public_html (ou httpdocs) / index.html é redirigido para www.dominio.com.br/ - neste caso toda vez que a página index do site aparecer com index.html no final, será exibido o endereço da home terminando com uma / (barra)

Da mesma forma, podemos redirigir um arquivo da raiz para um diretório (pasta). Por exemplo,

Redirect 301 /arquivoqualquer.html http://www.dominio.com.br/pastaA/arquivo-a html

Nesse caso redirigimos um arquivo (chamado de arquivoqualquer.html) do primeiro para o segundo nível, representado pela pastaA.

Podemos fazer o mesmo para um subdiretório:

Redirect 301 /arquivoqualquer.html http://www.dominio.com.br/pastaA/pastaB/arquivo-x html

Nesse caso dizemos que o redirecionamento foi feito da raiz para um subdiretório ou subpasta. Podemos ter sub-subdiretórios e outras extensões.

Arquivo htaccess localizado em um diretório do primeiro, segundo, terceiro, etc. nível

Há situações em que o arquivo na raiz fica muito grande ou não funciona bem. Podemos deixá-lo com alguns redirecionamentos que envolvem o primeiro nível e fazer mais um ou dois, três, etc. arquivos htaccess nos diretórios. Por exemplo, se localizado na pastaB:

Redirect 301 /pastaA/pastaB/arquivo-x html http://www.domínio.com.br/pastaC/arquivo-alfa.html

Nesse caso um arquivo do terceiro nível (arquivo-x.html foi redirecionado para outro arquivo (arquivo-alfa.html) situado num diretório (pastaC) do segundo nível.

O arquivo htaccess colocado em um diretório qualquer, redireciona para níveis mais altos ou mais baixos, exceto para a raiz.

Neste site temos um arquivo htaccess na raiz e outro na pasta do blog. Neste segundo colocamos apenas os redirecionamentos envolvendo arquivos do blog, o que dá mais agilidade e eficiência operacional, particularmente por serem em php.

-- APACHE SEM HTACCESS:

A impossibilidade de uso do arquivo htaccess em servidores Apache é uma situação que beira ao absurdo, mas ocorre em alguns servidores, especialmente em algumas revendas de hospedagem. Vejamos como podemos contornar algumas situações.

Arquivo PHP, com domínio sem www é redirigido para com www - colocar a seguinte instrução no topo da página:

<?
$host = $_SERVER['HTTP_HOST'];
if ( !strstr($host,"www.") ) {
header("Location: http://www.$host/");
}
?>

Arquivo PHP, é redirigido para outro dentro do site (instrução no topo da página):

<?
("HTTP/1.1 301 Moved Permanently");
header("Location:http://www. domínio . com .br/arquivoqualquer.php");exit();
?>

Arquivo PHP, é redirigido para outro dentro de uma pasta do site (instrução no topo da página):

<?
("HTTP/1.1 301 Moved Permanently");
header("Location:http://www.dominio. com .br/pastaqualquer/arquivoqualquer.php");exit();
?>

É proibida a reprodução total ou parcial desta página.

Julho, 2008
Setembro, 2008
Outubro, 2008
Novembro, 2008
Desembro, 2008
Fevereiro, 2009
Novembro, 2009
Novembro, 2011

Ir ao diretório de Consultas

Proprietário    Nota Legal     Política   Contato
Copyright © 2005-2013, Otimização de Sites Todos os direitos reservados