Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Léo Ferreira

Remover Interrogação do url

Recommended Posts

Não gostaria de usar o módulo de reescrita de urls do Apache. Por isso estou utilizando a seguinte notação para criar minhas urls:

 

www.meusite.com.br/?index

 

Então pego o ?index utilizando PHP:

 

$_SERVER['QUERY_STRING']

 

O que quero agora é remover a interrogação da url, ficando assim:

 

www.meusite.com.br/index

 

Gostaria de saber dos amigos programadores que tem mais experiência que eu se isso é possível, pensei se existe alguma configuração do PHP, alterada no php.ini que faça isso.

 

Desde já lhes agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de tentar uma nova maneira. Se houver solução para esse problema seria mais simples que o rewrite do Apache.

 

http://www.pinceladasdaweb.com.br/blog/2009/01/26/trabalhando-com-urls-amigaveis-sem-o-mod_rewrite/

 

Esse link é um exemplo que usa a seguinte solução:

 

www.meusite.com.br/index.php/index

 

e $_SERVER['REQUEST_URI'] para receber o URI.

 

Mas se pensar em url amigável, utilizar index.php sai da idéia inicial.

 

Se alguém achar alguma solução favor postar. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o ponto de interrogação no URL serve para usar uma query string após ele, portanto, esse negócio que você fez de usar /?index e depois recuperar com $_SERVER['QUERY_STRING'] é uma tremenda gambiarra, pois no caso o "index" seria um parâmetro sem valor nenhum.

 

Para reescrita de URL o mais indicado realmente é o módulo rewrite do Apache e não vejo porque não utilizá-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho, se você for pensar o próprio mod_rewrite do Apache no caso que estamos falando já é uma "gambiarra".

Eu apenas estou tentando utilizar o próprio PHP para resolver o problema, em vez de buscar uma solução externa a linguagem.

Eu como a maior parte dos desenvolvedores não tem um servidor próprio e tem de utilizar um servidor de alguma empresa de hospedagem. Então para configurar utiliza-se o htaccess, pois não se pode configurar o Apache diretamente. Dai tem-se uma perda considerável de performance de acordo com o número de acessos e do sistema considerado.

Melhor então que se utilize o próprio PHP ao htaccess.

Quem souber a configuração que altera a interrogação do url do PHP favor responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PHP é a linguagem de programação, quem cuida do acesso aos arquivos de acordo com o que é digitado no URL é o servidor WEB, no caso o Apache.

 

Eu nunca ouvi dizer que usar .htaccess causa perda de performance, onde você viu isso? Ele é apenas um arquivo para você customizar as configurações do Apache dentro do ambiente da sua hospedagem.

 

Ao meu ponto de vista usar o mod_rewrite não é nenhuma gambiarra, pois tudo o que ele vai fazer é a reescrita do URL, permitindo que o URL possa ser utilizado conforme as suas necessidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se usar um componente de um programa eh uma gambiarra, usar o programa eh o q? compreende a relacao parto-todo? entao pode-se concluir que se usar um componente do apache eh uma gambiarra, usar o apache eh pior ainda, entao useo IIS (e veras que eh pior ainda)...muito simples...

 

 

PS Gambiarra eh descontruir o q foi construido (peceba que ha diferenca entre desconstruir e desmontar/desfazer)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Leozitho, se você for pensar o próprio mod_rewrite do Apache no caso que estamos falando já é uma "gambiarra".

Agora eu ouvi de tudo já...

 

Cara, sem o apache, sua aplicação web não roda. O Mod Rewrite é uma das funcionalidades do apache, não se trata de nenhuma gambiarra.

 

Quanto à questão de performance, o impacto é mínimo. Se fosse algo tão absurdo, você acha que grandes sites o utilizariam? Observe as URLs deste fórum, são todas construidas com base o mod rewrite, também conhecidas como URLs amigáveis, que ajudam muito na busca por conteúdo pelos buscadores.

 

O que é mais legível?

http://forum.imasters.com.br/topic/451675-remover-interrogacao-do-url/

ou

http://forum.imasters.com.br/?content=topic&id=451675

 

Se você quer fazer esse tratamento das URLs no PHP por questão de flexibilidade, pesquise por "URL Routing", algo muito usado na maioria dos frameworks.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com relação a performance, eu acredito que o uso do arquivo .htaccess por si só não cause perda de performance, se houver perda é mínima como o Henrique falou.

 

O que com certeza causa perda de performance é usar expressões regulares nas regras do mod_rewrite, e já vi muita gente fazendo isso, inclusive usando dezenas de regras com ER, uma para cada padrão de URL. Imagine a cada acesso a uma página o Apache tendo que testar todos as ERs pra ver se alguma delas casa.

 

O ideal é sempre quando o arquivo ou pasta que foi chamado no URL não existir chamar direto o index.php, ele fará o controle do que deverá ser chamado.

 

Veja o código abaixo:

 


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

 

Esse eu peguei do Zend Framework, mas é praticamente o mesmo usado por outros frameworks e também outros sistemas em PHP, como o Wordpress por exemplo, que é o gerenciador de blogs mais usado no mundo.

 

Ele apenas verifica se existe um arquivo ou pasta no caminho chamado no URL, se não existir ele manda direto para o index.php que fará o controle interno do que deverá ser chamado. natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

RewriteRule ^.*$ index.php [NC,L]

Eu só não curto esse tipo de abordagem por um motivo:

 

-> dessa forma, o sistema é agora dependente do Mod Rewrite.

Se por algum motivo de projeto, ou de engenharia eu precisar "voltar" as queries strings abertas, não será mais "tão simples".

 

 

Apenas questão de "gosto" talvez. Ainda assim, gostaria que o autor do tópico informasse mais detalhes, pois o exemplo que foi exposto, não é uma clara idéia do que ele precisa, e responder apenas oque foi perguntado cruamente, levaria a uma resposta pobre, e talvez incorreta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, eu entendo sua frustração meu chapa, eu acredito que não seja possivel remover a ? só com o php, e assim como você, não curto usar o modeo rewrite, a não ser que seja obrigado, eu torno minhas URLS um pouco mais "amigaveis" desta forma ...

 

 

1º Obrigo o site a rodar sempre na pasta, exemplo http://www.meusite.com/

código abaixo entra antes de começar o HTML logicamente ...

 

<?php 

// Removendo todos os caracteres q possam vir de uma query string
$index = str_replace("?".$_SERVER['QUERY_STRING'], "", $_SERVER['REQUEST_URI']); 

// Obrigo a site a ser executado somente na pasta, removendo o index.php
if ($index != "/pasta_do_site/) header("Location: /pasta_do_site/);

 

2º Digamos que voce quer chamar uma pagina de produtos onde a categoria desse produto é celular ...

Ai o link seria esse http://www.meusite.com/?/categoria/celulares/

 


<?php

//busco o que há depois da interrogação ... no caso retornarará /categoria/celulares/
$url = isset($_SERVER['QUERY_STRING']) ? urldecode($_SERVER['QUERY_STRING']) : NULL;

// Coloco os valores depois de cada barra em chaves ... 
// retornará isso array([0] => [1] => categoria [2]=> celulares [3] => )
// Perceba que o valor 0 e 3 são Nulls pois depois da barra não havia nada ....		
$arr = explode("/", $url);

// Crio um array para guardar novos valores
$pag = array();

// Foreach para filtrar os valores vazios ...	
// retornara isso ... array([0] => categorias [1] => celulares)	
foreach($arr as $valor){ 
  if(!empty($valor)) { 
      $pag[] = $valor; 
   }
}

// Agora vou inverter os valores nas chaves para que $pag[0] seja sempre o valor principal,
// o valor que eu vou buscar em selects ou oq precisar... por exemplo
// Select * from produtos where categoria like '%"$pag[0]"%' order by categoria_nome
$pag = array_reverse($pag);


 

3º Vamos realizar as comparações para incluir os arquivos que queremos ...

 

<?php

// incluindo uma página estatica por exemplo que não precise de parametros do URL para funcionar ...
if($pag[0] == "carrinho"){ include "includes/carrinho.php"; }

// Incluir uma página que precisa de parametro do url para funcionar ...
// na pagina produtos ia receber o parametro "celulares" ou seja select * from ... where categoria = 'celulares'
if($url == "/categoria/".$pag[0]."/"){ include "includes/produtos.php"; }

// Agora se você precisar passar mais de um parametro ... por exemplo ...
// Url seria /categoria/celulares/originais/
// select * from categorias where categoria = '".$pag[1]."' and subcategoria = '$pag[0]' ...
if($url == "/categoria/".$pag[1]."/".$pag[0]."/"){ include "includes/produtos.php"; }

?>

 

Bom espero que ajude ao criador do topico, e que também possa ajudar outras pessoas q queiram tornar a URL amigavel sem ter que usar .htacess, e sem se matar de tentar entender e bolar expressões regulares ...

 

;)

 

Corrigindo Resposta do topico anterior, caso alguem queira copiar e colar ... esse aqui esta correto, a resposta anterior tem aspas faltando ... ;S

 

<?php 

// Removendo todos os caracteres q possam vir de uma query string
$index = str_replace("?".$_SERVER['QUERY_STRING'], "", $_SERVER['REQUEST_URI']); 

// Obrigo a site a ser executado somente na pasta, removendo o index.php
if ($index != "/pasta_do_site/") header("Location: /pasta_do_site/");

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desenvolva o sistema de uma forma que seja flexível

 

O sistema tem que reconhecer a url no formato original, no formato mod_rewrite e opcionalmente por linha de comando

 

Se o ambiente não possuir o recurso de mod_rewrite, basta desativá-lo e usar as URLs originais.

 

Extendendo um pouco o assunto, não aceite servidor de hospedagem que não ofereça o recurso porque provavelmente usam sistemas antigos e defasados.

 

Hoje em dia há muitas opções viáveis no mercado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz este tópico para procurar uma alternativa ao mod_rewrite em urls limpas. Vamos deixar o tópico em aberto caso o pessoal queira discutir o assunto.

 

Aproveitando gostaria de saber o seguinte:

tentei utilizar a alternativa escrita pelo Léo Teixeira:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

 

Então tive o seguinte problema: se colocar uma imagem diretamente na página index.php, como:

 

<img src="aplicacao/pasta/imagens/foto1.jpg">

 

ele acha a imagem.

 

Mas tenho um sistema que fica em outra pasta na seguinte disposição:

 

/

index.php

.htaccess

/pasta_protegida

sistema.php

/aplicacoes

/site

/imagens

foto1.jpg

/classes

Base.php

(outras classes)

 

Então em index.php apenas incluo o arquivo sistema.php. Em sistema.php incluo as classes da pasta classes e utilizo as mesmas normalmente. No final da execução imprimo o código que o sistema gera. Mas nesse caso ele não acha mais as imagens ou arquivos css e javascript que estão no código HTML gerado.

Acredito que o problema possa estar nos includes que utilizo, mas preciso da estrutura do sistema assim como está acima.

Se alguém tiver alguma ideia e possa testar a idéia eu agradeço. Qualquer dúvida só me perguntar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.