Erro de .htacess

Enviada por Rodrigo 
Rodrigo
Erro de .htacess
12 de May de 2014 às 06:26PM
Pois bem pessoal estou aqui mais uma vez depois de muito tempo com mais um problema que espero que mais uma vez possa obter ajuda de vocês o problema e o seguinte eu fiz 2 arquivos .htacess no site de hospedagem hostgator o problema esta se procedendo dentro do diretório ou seja no .htacess que fica dentro do diretório chamado painel o problema e que o arquivo .htacess dentro do diretório não esta funcionando devidamente o que acontece inicialmente e que não executa o script de login pela url amigável caso eu coloque a URL normal e o script de execução de locação normal sem URL amigável funciona com URL amigável não funciona. Gostaria da ajuda de vocês para concertar esse problema jã tentei de tudo mudar nas urls o nome de diretório e por ai vai sendo que essas mesmas configurações abaixo no meu host antigo funciona já no novo no hostgator não.

A versão PHP Version 5.3.28 abaixo segue as configurações que fiz no arquivo.


AuthType Basic
AuthName "painel"
Options +FollowSymlinks
RewriteCond %{http_host} ^meusite.com.br [NC]
RewriteRule ^(.*)$ http://meusite.com.br/$1 [r=301,NC]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(meusite\.com\.br)(:80)? [NC]
RewriteRule ^(.*) http://www.meusite.com.br$1 [R=301,L]

#Erros de paginas
ErrorDocument 400 /painel/
ErrorDocument 401 /painel/
ErrorDocument 404 /painel/
ErrorDocument 504 /painel/
ErrorDocument 505 /painel/

#Urls Amigaveis do Painel
RewriteRule ^inicio/?$ painel/inicio.php [L]
RewriteRule ^logar/?$ painel/index.php?page=login [L]
RewriteRule ^sair/?$ painel/index.php?page=logout [L]

#Urls de Perfil do Usuário Painel
RewriteRule ^usuario/perfil/([0-9]+)/?$ painel/usuario_conta.php?id=$1 [L]
RewriteRule ^usuario/perfil/atualizar/([0-9]+)/?$ painel/usuario_conta.php?page=dados&action=edit1&id=$1 [L]
Rodrigo
Re: Erro de .htacess
12 de May de 2014 às 08:26PM
Alguém poderia me ajudar ?
Rodrigo
Re: Erro de .htacess
13 de May de 2014 às 03:54AM
Directory /painel>

#Urls Amigaveis do Painel
RewriteRule ^inicio/?$ painel/inicio.php [L]
RewriteRule ^logar/?$ painel/index.php?page=login [L]
RewriteRule ^sair/?$ painel/index.php?page=logout [L]

#Urls de Perfil do Usuário Painel
RewriteRule ^usuario/perfil/([0-9]+)/?$ painel/usuario_conta.php?id=$1 [L]
RewriteRule ^usuario/perfil/atualizar/([0-9]+)/?$ painel/usuario_conta.php?page=dados&action=edit1&id=$1 [L]

</Directory>


Isso por acaso funcionaria aplicando no caso as as configurações direto no diretório sendo que colocando só um .htacss na pasta public ????

alguem por favor poderia me auxiliar ?
Brasilio Thomazo
Re: Erro de .htacess
16 de May de 2014 às 01:28PM
Vamos lá!
A diretiva Directory não pode ser usada no .htaccess, só pode ser usada no httpd.conf

Essa condição:
RewriteRule ^logar/?$ painel/index.php?page=login [L]
Só vai ser verdadeira se você executar:
http://site.com.br/logar/?

Uma melhor escolha seria:
RewriteRule ^logar$ painel/index.php?page=login [L]
Assim você vai conseguir um positivo no seguinte caso:
http://site.com.br/logar

Agora caso você queria que funcione com a / no final ou você cria duas condições ou você adiciona na expressão regular:
RewriteRule ^logar(/|)$ painel/index.php?page=login [L]

Detalhe, esse .htaccess tem que estar no seu DOCUMENT_ROOT, se você acessa o painel assim:
http://site.com.br/painel/logar então a condição correta ficaria assim:
RewriteRule ^painel/logar(/|)$ index.php?page=login [L]

Algumas coisas sobre Expressão Regular que pode te interessar:
O sinal ^ (circunflexo) mais o cifrão ($) diz para condição que uma string é verdadeira desde que inicie e termine de uma determinada forma, exemplo:

string_a = "logar";
string_b = "logar/";
string_c = "/logar";
string_d = "/logar/"

RewriteRule ^logar$ só é positivo para string a
RewriteRule ^logar só é positivo para as strings a e b
RewriteRule logar$ só é positivo para as strings a e c
RewriteRule logar é positivo para todas as strings

Caracteres como ., -, ?, +, entre outros tem suas determinadas funções e não podem ser usados como parâmetro de confirmação a não ser que sejam precedidos por uma barra invertida (\), procure mais sobre E.R (Expressão regular pra obter mais informações a respeito)
Rodrigo
Re: Erro de .htacess
16 de May de 2014 às 08:53PM
então no caso essa URL abaixo que ira no caso para usuario/dados/1/ ficaria assim ne

RewriteRule ^usuario/dados/([0-9]+)?$ painel/usuario.php?page=usuario&dados=$1 [L] ou


RewriteRule ^usuario(/|)dados(/|)([0-9]+)(/|)?$ painel/usuario.php?page=usuario&dados=$1 [L]

certo desde já agradeço a sua ajuda.
Rodrigo
Re: Erro de .htacess
16 de May de 2014 às 08:57PM
Correção da RewriteRule ^usuario(/|)dados(/|)([0-9]+)(/|)?$ painel/usuario.php?page=usuario&dados=$1 [L]
o correto seria.

RewriteRule ^usuario/dados/([0-9]+)(/|)?$ painel/usuario.php?page=usuario&dados=$1 [L]
Rodrigo
Re: Erro de .htacess
16 de May de 2014 às 08:59PM
E tipo esqueci de perguntar e que tipo no meu host 1 o htacess funciona ate dentro do diretório já no meu vos não saberia me informar o motivo grato por sua ajuda.
Brasilio Thomazo
Re: Erro de .htacess
17 de May de 2014 às 09:21AM
É o seguinte, o apache procura por .htaccess no diretório que ele está executando o arquivo.
Se você está executando index.php que está na pasta /home/user/public_html é ai o primeiro lugar que o apache vai procurar o .htaccess, isso é o padrão o normal do apache.

Existem ai umas configurações aberrantes que pode modificar isso, um exemplo é apache com ngix que gera umas aberrações onde o local o .htaccess deve estar é totalmente a par de onde o arquivo está sendo executado.

O segredo é, adicione o .htaccess sempre no mesmo diretório onde vai ficar o arquivo que você pretende executar.

Só uma correção.

RewriteRule ^usuario/dados/([0-9]+)(/|)$ painel/usuario.php?page=usuario&dados=$1

O simbolo ? (interrogação) é usado na seguinte circunstancia:
string = usuario/dados/5/10/11/
^([a-z0-9])/(.+?)/ nesse caso ele vai pegar a string verificar se é verdadeira e se for vai separar em grupos
$1 = usuario
$2 = dados
Como nesse caso eu usei (.+?)/ é mesmo que eu dizer pra ele procure por qualquer coisa e pare assim que você encontrar uma /, se fosse assim:
^([a-z0-9])/(.+)/ o grupo ficaria assim:
$1 = usuario
$2 = dados/5/10/11
(.+) eu digo pra ele procure por qualquer coisa inclusive uma barra (/) e deixe de fora apenas a ultima barra que você encontrar, o sinal de ? diz pra o programa pare por aqui.
Se você usar dessa maneira o programa pode cortar a string, exemplo
^([a-z0-9])/(.+?) nesse caso o grupo provavelmente ficaria assim:
$1 = usuario
$2 = d
Então $2 vai conter só a primeira ocorrência após ele encontrar uma barra que se enquadre na condição (.+) = TUDO.
Rodrigo
Re: Erro de .htacess
08 de June de 2014 às 03:45AM
Antes de tudo desculpe pela demora para responder tava sem internet -_- agradeço pela ajuda desde já consegui fazer a parada funcionar graças a sua ajuda muito agradecido esta tudo funcionando 100% todas as urls ^_^
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.