Ir para conteúdo

Arquivado

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

cassiano óliver

URLS amigáveis

Recommended Posts

E aí brother, tente fazer um .htacess com o seguinte código:

 

#habilita o modulo Rewrite
RewriteEngine On

#Indica qual é a pasta base de todo o conteudo
RewriteBase /

#Verifica se a url digitada é um arquivo caso seja para aqui
RewriteCond %{REQUEST_FILENAME} !-f

#Verifica se a url digitada é uma pasta caso seja para aqui
RewriteCond %{REQUEST_FILENAME} !-d

#rewrite das notícias
RewriteRule ^([a-z0-9+_-]+)\/?([a-z0-9+_-]+)?\/?$ /index.php?pagina=$1&id=$2

Aí na hora de fazer os links para acessar a notícia coloque assim:

<a href="noticia/<? echo $id; ?>/"> São Paulo 1x0 Fluminense </a> //hehehe

Vê se funciona, se não der volta aí e se funcionar volte também, hehe, pra dizer que funcionou.

 

Falou

 

Mais uma coisa...

 

na hora de recuperar a URL pode fazer assim: $_GET['pagina'] e $_GET['id']

 

Falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo problema ainda...

os arquivos .php do diretório root, são incluidos normalmente...

 

porém os que estão em outro diretório, não funciona...

 

será que pra usar url amigável todos os arquivos têm de estar no diretório root?

 

krak, vai ficar uma bagunça...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, uma gambiarra básica... Coloca uma index dentro de cada pasta e dá um header('location:../index.php?coloca o restante aqui').

 

Gambiarra muito grande, mas é uma solução.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso esse .htacess que te passei aqui e consigo dar includes normalmente. Inclusive em diretórios diferentes.

 

Como você ta usando o caminho no include?

 

Faça alguns testes com esses caminhos que você está usando para incluir os arquivos.

 

Falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentei..

 

include "/europa/contato/contato.php" e "contato/contato.php" simplesmente não vai...

sempre lista os arquivos do diretório, como se tivesse acessando o diretório...

 

 

Olha, uma gambiarra básica... Coloca uma index dentro de cada pasta e dá um header('location:../index.php?coloca o restante aqui').

 

Gambiarra muito grande, mas é uma solução.

 

Carlos Eduardo

 

mas aí a url já sai do padrão "amigável"...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for ajudar, eu uso este

#habilita a reescrita

RewriteEngine on

#se for aquivo, para aki

RewriteCond %{REQUEST_FILENAME} !-f

#se for diretorio, para aki

RewriteCond %{REQUEST_FILENAME} !-d

#redireciona td para a index

RewriteRule .*[^.jpg|.js|.css|.png]$ index.php

#evita listar qq conteudo de qq dire

Options -Indexes

 

 


<?php

/**
* Inicializa o controller evocado.
* @author Igor C de Paula <espiritodocoracao@hotmail.com>
* @package
* @version 1.0
*/
class FrontController {



   private function __construct( )
   {
       //
   }

   /**
    * Inclui o Controller evocado pelo sistema
    * @access public
    * @return void
    */
   public function Init( )
   {
       if( self::LocalRoute( ) )
       {
           $controller = self::RequestURI( '1' );
           $method     = self::RequestURI( '2' );
           $action     = self::RequestURI( '3' );
           if( $controller == '' )
           {
               $controller = 'Principal';
           }
           if( $method == '' )
           {
               $method = 'Index';
           }
       }
       else
       {
           $controller = self::RequestURI( '0' );
           $method     = self::RequestURI( '1' );
           $action     = self::RequestURI( '2' );
           if( $controller == '' )
           {
               $controller = 'Principal';
           }
           if( $method == '' )
           {
               $method = 'Index';
           }
       }
       $filename = SYSTEM_Config::CONTROLLER . "{$controller}.controller.php" ;

       if( file_exists( $filename) ){
           require_once( $filename );
           $controll = new $controller;
           if( $controll instanceof SYSTEM_Controller )
           {
               $controll->$method( $action );
           }
           else
           {
               $message = "Este controller ($controller) nao segue as exigencias do Sistema!";
               $e = new SYSTEM_Exception( $message );
               $e->log( );
               throw new SYSTEM_Exception( $message );

           }

       }else{
           echo ( "Controller desconhecido: {$controller}!" );
       }
   }

   /**
    * Retorna o nivel do parametro da url
    * @access private
    * @param String $num O nivel desejado
    * @return String O nivel do parametro da url
    */
   private function RequestURI( $num )
   {
       $uri = explode( '/' , $_SERVER['REQUEST_URI'] );

       for( $i = 0; $i <= count( $uri ); $i++ )
       {
           if( $uri[$i] == '' )
           {
               unset( $uri[$i] );
           }
           else
           {
               $url[] = $uri[$i];
           }
       }


       return $url[$num];
   }

   /**
    * Retorna True caso o ambiente for um localhost ou false em caso de host remoto.
    * @access private
    * @return Bool True se localhost, false se host remoto.
    */
   private function LocalRoute( )
   {
       $diretorio = substr( $_SERVER['SCRIPT_FILENAME'] , strlen($_SERVER['DOCUMENT_ROOT']) , -10 );
       $dir       = substr( $diretorio , 1 );
       $local     = self::RequestURI( '0' ) == $dir ? true : false;
       return $local;
   }

}

 

 

so para ter certeza, tb uso xampp, so q o lite

(q da pra levar num pendrivee startar de la mesmo =D )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, Cassiano, tive mais uma idéia POG...

 

Troca o nome da pasta. Tipo, ao invés de contato/contato.php, usa contact/contato.php. Como eu falei, idéia POG, enquanto não aparece a solução definitiva.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

você teria q adaptar minha classe, você conseguiu entende-la?

Não. Nunca trabalhei com classes...

Se puder me mostrar como adaptar..

 

.htaccess

#habilita o modulo Rewrite

RewriteEngine On

 

#Indica qual é a pasta base de todo o conteudo

RewriteBase /europa/

 

#Verifica se a url digitada é um arquivo caso seja para aqui

RewriteCond %{REQUEST_FILENAME} !-f

 

#Verifica se a url digitada é uma pasta caso seja para aqui

RewriteCond %{REQUEST_FILENAME} !-d

 

#rewrite das notícias

RewriteRule ^([a-z0-9+_-]+)\/?([a-z0-9+_-]+)?\/?$ /europa/index.php?pagina=$1&id=$2

 

 

index.php

switch($pg) {
	case "home":
	include "home.php";
	break;
        // localhost/europa/home
	// aqui funciona
	
        case "empresa":
	include "empresa.php";
	break;
	// localhost/europa/empresa
	// aqui funciona
        
	case "contato":
	include "contato/contato.php";
	break;
	// localhost/europa/contato
	// aqui não funciona, acessa o diretório e lista os arquivos dele
        
	default:
	include "home.php";
	break;
}

A estrutura está assim...

 

htdocs

---europa

---index.php

---home.php

---empresa.php

---contato

------contato.php

 

a url só esta funcionando com os arquivos da raiz (/europa/), se sair desse diretório já não funciona, o diretório é aberto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte... Troque o nome da pasta. De contato para contact. No seu código, troque isto.

 

case "contato":
        include "contato/contato.php";
        break;

Por isto

 

case 'contato':
        include 'contact/contato.php';
        break;

Tem que funcionar. É meio gambiarra, mas tem que funcionar. Porque isto está acontecendo... Porque quando você entra no endereço http://localhost/europa/contato, ele tenta entrar na pasta htdocs/europa/contato. Se não existir esta pasta, ele vai entender o contato como sendo a variável que você precisa.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz isso anteriormente mas não vai...

continua abrindo o diretório "contato".

 

Ahhhhhhhh...

agora descobri, antes tinha renomeado, mas não apaguei a pasta contato do htdocs..

 

agora funcionou!!!

 

---------------------------------------------------------------------------------------------

 

Agora me pintou uma outra dúvida...

 

Posso acessar as notícias assim: localhost/europa/noticias/

 

vou acessar normalmente...

 

Mas e para funcionar a paginação?

o normal seria assim: localhost/europa/?pagina=noticias&pag=1

 

como acrescento outra regra no .htacces só para a paginação?

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.