Jump to content


Photo

Rewrite Não Funciona No Servidor Mesmo Com Mod_Rewrite Ativado


  • Faça o login para participar
21 replies to this topic

#1 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 26/03/2012, 15:37

Olá

Quero migrar as URLs do meu site para URLs amigáveis. O arquivo .htaccess está pronto e funciona quando testo ele localmente (uso o Xampp). Conversei com o pessoal do servidor e eles dizem que o mod_rewrite está ativo.

Mas quando mando o arquivo para o servidor, o site não entra, dá Internal Server Error.

Mandei o arquivo para ser analisado pelo pessoal do servidor, mas enquanto espero resposta, queria saber se alguém daqui poderia me ajudar.

Esse é meu arquivo .htaccess:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([a-z]+)\/?$ index.php?pg=$1 [L]
RewriteRule ^shows\/([0-9]+)\/?$ index.php?pg=shows&ano=$1 [L]
RewriteRule ^shows\/([0-9]+)\/([0-9,a-z]+)\/([a-z]+)\/?$ index.php?pg=shows&ano=$1&$3=$2 [L]
RewriteRule ^news\/([a-z,_-]+)\/?$ index.php?pg=news&titulo=$1 [L]
RewriteRule ^media\/([a-z]+)\/?$ index.php?pg=media&tipo=$1 [L]
RewriteRule ^repert\/([a-z]+)\/?$ index.php?pg=repert&modo=$1 [L]


Alguém vê algo nele que pode não ser aceito pelo servidor, ou sabe de alguma configuração padrão dos servidores que pode estar barrando meu .htaccess?

Já tentei tirar o Options +FollowSymLinks, já tentei colocar "RewriteBase /", já tentei dar CHMOD para 444 (vi em um site alguém falando sobre isso para o .htaccess), já tentei tirar o RewriteEngine On (vi em outro site alguém falando que, se o RewriteEngine do .htaccess do servidor estiver on, se colocá-lo em outro .htacess, pode dar problema)... Não sei mais o que fazer.

Obrigada

Livia

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 26/03/2012, 22:58

Vai colocando linha por linha e vê no que dá.

#3 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 27/03/2012, 04:47

LeoB, obrigada novamente pela resposta.

Infelizmente dá o mesmo erro se eu colocar no arquivo apenas a linha Options +FollowSymLinks, ou só RewriteEngine On, ou só a primeira condição, ou só a primeira regra.

Parece que o servidor não aceita os simples fato de ter um .htaccess no diretório...

Eles usam servidores compartilhados, esqueci de dizer.

Edição feita por: Livia29, 27/03/2012, 04:51.


#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/03/2012, 09:41

Parece que o jeito é esperar a resposta do pessoal do servidor. Não tem muito o que você possa fazer por enquanto.

#5 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 27/03/2012, 17:43

Tinha uma dúvida aqui que apaguei, depois eu vejo.

Voltando à questão... Eles liberaram meu .htaccess. Porém nenhum dos RewriteRules funcionam.

Por exemplo, peço para que o endereço index.php?pg=news seja redirecionado para www.site.com.br/news.

Ao invés disso, ele abre www.site.com.br/news.php, que é uma página que existe, mas que é 'includada' no index.

Se peço para abrir www.site.com.br/shows/2010, ele abre www.site.com.br/shows.php.

No meu computador esse .htaccess funciona perfeitamente... Existe algo de errado que eu possa estar fazendo no arquivo que mando para o servidor?

Edição feita por: Livia29, 27/03/2012, 17:44.


#6 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 28/03/2012, 17:18

Ola eu estou criando um sistema em php ja esta quase pronto e o meu URL .HTACCESS esta assim ainda não testei no servidor "remoto" mais localmente esta tudo ok

RewriteEngine on
RewriteRule noticia/(.*)/post_id/(.*)/ index.php?noticia=$1&post_id=$2
RewriteRule noticia/(.*)/post_id/(.*) index.php?noticia=$1&post_id=$2					

RewriteRule noticia/(.*)/pg/(.*)/ index.php?noticia=$1&pg=$2
RewriteRule noticia/(.*)/pg/(.*) index.php?noticia=$1&pg=$2	
			
RewriteRule noticias/(.*)/catid/(.*)/pg/(.*)/ index.php?noticia=$1&catid=$2&pg=$3
RewriteRule noticias/(.*)/catid/(.*)/pg/(.*) index.php?noticia=$1&catid=$2&pg=$3

RewriteRule eventos/(.*)/pg/(.*)/ index.php?eventos=$1&pg=$2
RewriteRule eventos/(.*)/pg/(.*) index.php?eventos=$1&pg=$2

RewriteRule evento/(.*)/event_id/(.*)/ index.php?evento=$1&event_id=$2
RewriteRule evento/(.*)/event_id/(.*) index.php?evento=$1&event_id=$2	

RewriteRule galeria/(.*)/pg/(.*)/ index.php?galeria=$1&pg=$2
RewriteRule galeria/(.*)/pg/(.*) index.php?galeria=$1&pg=$2	

RewriteRule galeria/(.*)/gid/(.*)/ index.php?galeria=$1&gid=$2
RewriteRule galeria/(.*)/gid/(.*) index.php?galeria=$1&gid=$2	

RewriteRule anuncie/(.*) index.php?anuncie=$1
RewriteRule anuncie/(.*) index.php?anuncie=$1

RewriteRule contato/(.*) index.php?contato=$1
RewriteRule contato/(.*) index.php?contato=$1


dai chamo a noticia assim
http://localhost/nom...edicao_anterior
Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#7 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 28/03/2012, 17:54

Olá, Diego

Então, meu htaccess funciona localmente. Por alguma razão que estou tentando descobrir, ele não funciona no servidor.

Mas quero te fazer algumas perguntas, para você ou para quem puder dar uma ajuda... Não entendo bem de htaccess, estou lendo e aprendendo sobre isso agora.

Por que alguns RewriteRules são iguais no seu arquivo?

RewriteRule contato/(.*) index.php?contato=$1
RewriteRule contato/(.*) index.php?contato=$1


E outra coisa, aqui imagino que você quis especificar um endereço com a barra no final e outro sem a barra, para que haja essas duas opções de acesso, estou certa?

RewriteRule noticia/(.*)/post_id/(.*)/ index.php?noticia=$1&post_id=$2
RewriteRule noticia/(.*)/post_id/(.*) index.php?noticia=$1&post_id=$2


A regra de colocar um ? no final de uma das linhas não tiraria a necessidade de uma das linhas? Ou isso poderia dar problema com o servidor?

Outra coisa, ainda, sobre ER. É opcional escapar a barra e começar a ER com ^? Vi tutoriais assim, também.

O estranho do meu htaccess é que nem se eu deixá-lo assim:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)\/?$ index.php?pg=$1 [L]


Ele funciona. Pega todos os .php. Não entendo por que funciona localmente e não no servidor, é o que queria saber... Algo no meu arquivo não é aceito por ele...

Edição feita por: Livia29, 28/03/2012, 17:56.


#8 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 29/03/2012, 09:00

ola
Pergunta:Por que alguns RewriteRules são iguais no seu arquivo?
resposta: este codigo aqui deveria ter um / na segunda linha mais funciona legal se eu deixar somente a primeira linha com ou sem a / no final...
RewriteRule contato/(.*)/ index.php?contato=$1
RewriteRule contato/(.*) index.php?contato=$1
Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#9 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 29/03/2012, 22:03

O código da Lívia está melhor. O problema de uma regra como essa:

RewriteRule contato/(.*) index.php?contato=$1
É que ele pega o padrão em qualquer parte da URL. Não podemos esquecer que o teste do padrão segue as regras de expressões regulares.

  • http://www.site.com.br/contato/teste
  • http://www.site.com.br/pasta/contato/teste
  • http://www.site.com.br/pasta/contato/exemplo/teste
Todas essas URLs satisfazem a regra acima. Usar o ^ e o $ são importantes pra garantir que a URL inteira atenda ao padrão. ^ quer dizer que a string começa ali. E $ diz que a string acaba ali.

RewriteRule ^contato/(.*)/?$ index.php?contato=$1
Assim apenas a primeira da lista seria aceita.

Edição feita por: LeoB, 29/03/2012, 22:05.


#10 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 30/03/2012, 00:32

Entendi...

LeoB, poderia me dizer se há algo de errado nesse .htaccess?

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)\/?$ index.php?pg=$1 [L]
RewriteRule ^shows\/([0-9]+)\/?$ index.php?pg=shows&ano=$1 [L]
RewriteRule ^shows\/([0-9]+)\/([a-z0-9]+)\/([a-z]+)\/?$ index.php?pg=shows&ano=$1&$3=$2 [L]
RewriteRule ^news\/([a-z0-9-]+)\/?$ index.php?pg=news&titulo=$1 [L]
RewriteRule ^media\/([a-z]+)\/?$ index.php?pg=media&tipo=$1 [L]
RewriteRule ^repert\/([a-z]+)\/?$ index.php?pg=repert&modo=$1 [L]


Ele funciona localmente e no servidor não. Perguntei ao pessoal do servidor o que ele tem de errado que faz com que não funcione no servidor e eles só me responderam que há algo de errado na codificação desse arquivo.

Tentei deixar as quatro primeiras linhas mais a primeira regra, tentei tirar a primeira linha, tentei mudar as flags, nada dá certo - ele abre as páginas php, ao invés das páginas "includadas" no index.php.

Não consigo encontrar erro! Por que funcionaria localmente e no servidor não...?

#11 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 30/03/2012, 09:37

Ola realmente oque o leo falou esta totalmente correto...
Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#12 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 30/03/2012, 11:20

Se eles falaram que o problema é a codificação do arquivo, precisa fuçar no seu editor. Ele pode, por exemplo, salvar as coisas em uma codificação incomum. E de repente funciona local porque seu computador é Windows, mas o servidor provavelmente é Linux, e talvez os dois não lidem com essa codificação da mesma maneira. Veja qual a codificação que seu editor usa pra salvar os arquivos.

#13 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 30/03/2012, 14:37

Tudo bem, Diego. Obrigada pela ajuda.

LeoB, entendi o que você quis dizer. Mas criei o arquivo no editor deles mesmos. Como o servidor é compartilhado, eles não me deixaram mandar o arquivo por FTP. Criei, nomeei e salvei o arquivo na raiz do meu site através do editor deles.

De qualquer forma, acabei de reescrever no editor deles o código do meu htaccess, caracter por caracter, e continua não funcionando...

O que eu tinha entendido da mensagem deles é que os códigos que estou usando no htaccess têm algo de errado. Mas não sei o quê. Já tentei mudar os ([a-z]+) por algo tipo (.+) ou (.*). Continua não funcionando.

Tá difícil...

Edição feita por: Livia29, 30/03/2012, 14:46.


#14 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 30/03/2012, 22:07

O único problema que vejo aí é esse RewriteCond, porque essas condições se aplicam somente à primeira regra seguinte, então as demais não passam por essa verificação, mas de qualquer modo isso não faria não funcionar. Ah, e não precisa desse FollowSymLinks.

...

Falei uma coisa aqui nada a ver. Confirmando, o erro é Internal Server Error?

Servidor compartilhado é um problema... Se você conseguisse acesso aos logs do apache, resolvia rapidinho.

Edição feita por: LeoB, 30/03/2012, 22:10.


#15 Livia29

Livia29

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino
  • Localidade:São Paulo

Posted 31/03/2012, 03:31

Deixa eu explicar melhor, ficou tudo cortado. rs

Não dá mais Internal Server Error desde que eles fizeram algo no servidor e liberaram meu htaccess.

Mas agora, quando tento acessar no servidor os redirecionamentos que eu quero, do tipo

http://www.site.com.br/news
http://www.site.com.br/shows
http://www.site.com.br/repert

Aparece

http://www.site.com.br/news.php
http://www.site.com.br/shows.php
http://www.site.com.br/repert.php

Que são os phps "includados" no index. Não quero que sejam vistos separados.

Sobre o RewriteCond, teria que deixar então dois RewriteConds para diretório e arquivo antes de cada regra? Aliás, esse RewriteCond !-f não deveria evitar exatamente que esses phps fossem pegos, ou entendi errado?

É... Não bastasse servidor compartilhado ser um problema, o atendimento deles é muito ruim.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq