Ir ao conteúdo
  • Cadastre-se

Codeigniter - PHP - Ativando "url_preffix"


Posts recomendados

Olá pessoal!

Aos amigos conhecedores do framework, venho expor um ponto em discução, imagino que servirá para outros usuários mais também.

A questão é que não existe no Codeigniter uma configuração (muito útil por sinal) url_preffix assim como a url_suffix encontrada no config/config.php.

 

Isso se torna útil quando o cliente usa proxy e não há possibilidade de fazermos alterações e adicionar exceptions no servidor dele, sendo assim a solução teria de vir de nossa aplicação.

 

O Problema:

-> Houveram reclamações de que as páginas visualizadas pelos usuários no sistema, nao competiam com o perfil de usuário que foi feito o login. Analisando bem mais a fundo, percebemos que o que era mostrado para um usuário, na verdade acontecia de ser carregado um cache do proxy do acesso de outro usuário e apresentado para os demais usuários. O sistema trabalha com acesso de dois perfis diferentes à mesma página/controller porém apresentando informações relevantes e diferentes a cada qual.

Mesmo que o sistema não apresentasse problema algum, dentro da rede do cliente, o problema perdurava.

 

A solução:

-> Forçar que o url sempre fosse diferente a cada acesso a qualquer url no sistema, forçando assim o proxy a recarregar a url requisitada.

 

Como:

->     ao invés de: http://seudominio.com/index.php/home
        utilizar: http://seudominio.com/index.php/123987654/home OU http://seudominio.com/123987654/index.php/home

 

Como Fazer:

-> Tentei alterando as regras de rewrite do .htaccess e setando "$config['index_page'] = 'index.php/'.time();" no config/config.php porém o Codeigniter nao compreende de forma alguma a magia que eu quero fazer. Ele se perde no próprio roteamento entre controllers.

Tentei então, trabalhar de outra forma, com o url_suffix setado para um hash qualquer ($config['url_suffix'] = '/'.time(); ), porém o CI dá problema, principalmente em páginas que trabalham com a própria paginação do CI (passando o offset pelo url) ou com parâmetros GET opcionais nas functions dos controllers.

Testei depois uma forma com o routeamento do próprio CI. Instanciei o seguinte: $route['([0-9]*)/.*'] = '$2';. DEssa forma ele reconheceu o segmento, e reconheceu que deveria levar em conta apenas o segundo segmento, ignorando o primeiro, porém o codeigniter faz um redirecionamento, saindo de http://seudominio.com/index.php/123987654/home para http://seudominio.com/index.php/home. Ainda não é a solução.

 

O Plano B:

-> Depois de muita pesquisa sem encontrar algo relevante, retornei aos pra mimórdios e recomecei do zero.

Abri o .htaccess e alterei de ^(.*)$ index.php/$1 para ^([0-9]*)/(.*)$ index.php/$2. Estabelecendo que a url que contém um segmento numérico em qualquer quantidade ( [0-9]* ) , seguida de uma barra e qualquer outra coisa em qualquer quantidade ( .* ), será direcionado para o index.php seguido da variável dois, que recebe a outra coisa qualquer depois do segmento numérico.

Ótimo, aqui a expressão regular atende exatamente o que eu preciso, mas ainda não funciona.

Abri o config.php e na linha que se especifica o index_page, troquei o index.php para a função time() do php que retorna os milisegundos em unix com dez dígitos. Ficou assim: $config['index_page'] = time() ;

Agora ok. Disse pro codeigniter que o hash de dez números é a página inicial, e o htaccess está dizendo para o servidor que esse hash deve ser "ignorado" e direcionado para index.php/QQCOISA.

Funcionou! #SQN.

Então analisando o config.php cheguei na sessao do Protocolo URI e me deparei com o seguinte texto: [...] If your links do not seem to work, try one of the other delicious flavors [...]. Ou seja, numa tradução livre: "Se seus links parecem não funcionar, tente um desses outros sabores deliciosos".
Tentei alterando de $config['uri_protocol']    = 'AUTO' para $config['uri_protocol']    = 'PATH_INFO', que me faz mais sentido usar este. Porque? Loginamente quero que o sistema acesse o path da aplicação, indiferente do que tem no lugar do index.php na url. Me pareceu mais sensato e funcionou.

Procurei na web mas nao vi nada relevante que desse mais explicações sobre o PATH_INFO.

 

Então bastou acessar o sistema novamente eeeeeeeee.... Voilà! Funcionaaa!!!

 

O sistema passou a entender os urls do tipo http://seudominio.com/123987654/home da mesma forma que entenderia o http://seudominio.com/index.php/home.

 

 

Sucesso a todos!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...