Ir para conteúdo

POWERED BY:

Arquivado

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

baldit

url amigável - HTACCESS

Recommended Posts

Boa tarde!

 

Tenho um htaccess sendo:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php

 

Pois bem, ele faz tirar a extensão PHP dos arquivos

 

Exemplo:

www.meusite.com.br/planos.php

 

ficará:

www.meusite.com.br/planos

 

Eu gostaria de saber se tem como editar esse arquivo pra ficar assim:

 

www.meusite.com.br/hospedagem/planos

 

sem precisar criar uma pasta chamada "hospedagem" ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

 

Tenho um htaccess sendo:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php

 

Pois bem, ele faz tirar a extensão PHP dos arquivos

 

Exemplo:

www.meusite.com.br/planos.php

 

ficará:

www.meusite.com.br/planos

 

Eu gostaria de saber se tem como editar esse arquivo pra ficar assim:

 

www.meusite.com.br/hospedagem/planos

 

sem precisar criar uma pasta chamada "hospedagem" ..

 

 

O que você precisa fazer é pegar os valores da url

$params = explode("/", str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));

 

para cada $params será uma parte do link

ex: www.meusite.com/busca/resultado-da-minha-busca

 

$params[0] = busca

$params[1] = resultado-da-minha-busca

 

pega o valor

nesse caso vamos dizer que existisse a página busca.php

 

então o código ficaria assim

 

if(file_exists($params[0].".php")) {
 include($params[0].".php");
} else {
 include("404.php"); // Página de erro caso tenha criado
}

 

espero ter ajudado!! =DD

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você precisa fazer é pegar os valores da url

$params = explode("/", str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));

 

para cada $params será uma parte do link

ex: www.meusite.com/busca/resultado-da-minha-busca

 

$params[0] = busca

$params[1] = resultado-da-minha-busca

 

pega o valor

nesse caso vamos dizer que existisse a página busca.php

 

então o código ficaria assim

 

if(file_exists($params[0].".php")) {
 include($params[0].".php");
} else {
 include("404.php"); // Página de erro caso tenha criado
}

 

espero ter ajudado!! =DD

 

betinho.pngEquipe Beta

 

Tacno eu quero aprender a fazer dessa forma, mas não entendi como devo fazer, você poderia dar uma explicação mais detalhada...

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

   	//Pega url 
   	$url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : getenv("REQUEST_URI"); 

	/* O array $dados terá tantos componentes quanto forem digitados pelo usuario por ex.: se ele digitar: 
	 * http://.../eventos/eventos, o array $dados terá 3 componentes: $dados[0]/$dados[1]/$dados[2], 
	 * $dados = explode('/',$url); separa os dados, removendo a '/' do inicio da string 
	 */ 

	$dados = explode('/',$url); 

	/* Recupera os dados digitados pelo usario*/ 
	$pasta 		=	isset($dados[1]) ? $dados[1] : ""; 
	$arquivo 	=	isset($dados[2]) ? $dados[2] : ""; 
	$dadoUm 	=	isset($dados[3]) ? $dados[3] : ""; 
	$dadoDois 	= 	isset($dados[4]) ? $dados[4] : ""; 
	$dadoTres 	= 	isset($dados[5]) ? $dados[5] : ""; 
	$dadoQuatro	=	isset($dados[6]) ? $dados[6] : ""; 
	$dadoCinco	=  	isset($dados[7]) ? $dados[7] : ""; 
	$dadoSeis 	=  	isset($dados[8]) ? $dados[8] : ""; 
	$dadoSete 	=  	isset($dados[9]) ? $dados[9] : ""; 
	$dadoOito 	=  	isset($dados[10])? $dados[10]: ""; 
	$dadoNove 	=  	isset($dados[11])? $dados[11]: ""; 
	$dadoDez 	=  	isset($dados[12])? $dados[12]: "";


/*********************** INCLUI AS PÁGINAS DO SITE ********************/


//Verifica se o arquivo existe
if(file_exists("$pasta/$arquivo.php") || file_exists("$pasta/$arquivo/$dadoUm.php")){

	//Se o arquivo n for um diretorio inclui do contrario da erro
	include_once((is_file("$pasta/$arquivo.php")) ? "$pasta/$arquivo.php" : "$pasta/$arquivo/$dadoUm.php");

	//Verifica se o arquivo existe
}elseif($pasta == "" && $arquivo == ""){

		//Se o arquivo n for um diretorio inclui do contrario da erro
		include_once((is_file("$pasta.php")) ? "$pasta.php" : "principal.php");

	}else{

		//Do contrario mosta a pagina de erro
		include_once("erros/erro_404.php");
}

/****************** IMPRIME AS PAGINAS NA TELA ************************/

 

Exemplo:

se o usuario digitar http://seusite.com.br/texto/meutexto/3/como-recuperar-os-dados

fica assim:

$pasta = texto;

$arquivo = meutexto;

$dadoUm = 3;

$dadoDois = como-recuperar-os-dados;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ell Alves, veja bem, estou tentando fazer e ñ tá dando certo, vou mostrar minha estrutura

http://www.izabellenossa.com.br/lojanossa/index.php

 

No index eu uso uma uso faço as chamadas para as páginas:

 foreach ($_REQUEST as $___opt => $___val) {
         $$___opt = $___val;
       }
       if(empty($pg)) {
           include("nav/lista_categoria.php");
       }
       elseif(substr($pg, 0, 4)=='http' or substr($pg, 
       0, 1)=="/" or substr($pg, 0, 1)==".") 
       {
       echo '<br><font face=arial size=11px><br><b>A página não existe.</b><br>Por favor selecione uma página a partir do Menu Principal.</font>'; 
       }
       else {
           include("nav/$pg.php");
       }

 

Eu uso link´s para chamar as páginas e nesse link eu coloco paramentros, tipo:

 <a href="index.php?pg=lista_categoria&id=<?php echo $list['id']">Bolsas</a>

 

Então fiz dessa forma:

$url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : getenv("REQUEST_URI"); 
$dados = explode('/',$url); 
$pasta          =       isset($dados[1]) ? $dados[1] : "teste"; 
$arquivo        =       isset($dados[2]) ? $dados[2] : "url"; 
$dadoUm         =       isset($dados[3]) ? $dados[3] : "amigavel"; 

 

Onde eu errei ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

   	//Pega url 
   	$url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : getenv("REQUEST_URI"); 

	/* O array $dados terá tantos componentes quanto forem digitados pelo usuario por ex.: se ele digitar: 
	 * http://.../eventos/eventos, o array $dados terá 3 componentes: $dados[0]/$dados[1]/$dados[2], 
	 * $dados = explode('/',$url); separa os dados, removendo a '/' do inicio da string 
	 */ 

	$dados = explode('/',$url); 

	/* Recupera os dados digitados pelo usario*/ 
	$pasta 		=	isset($dados[1]) ? $dados[1] : ""; 
	$arquivo 	=	isset($dados[2]) ? $dados[2] : ""; 
	$dadoUm 	=	isset($dados[3]) ? $dados[3] : ""; 
	$dadoDois 	= 	isset($dados[4]) ? $dados[4] : ""; 
	$dadoTres 	= 	isset($dados[5]) ? $dados[5] : ""; 
	$dadoQuatro	=	isset($dados[6]) ? $dados[6] : ""; 
	$dadoCinco	=  	isset($dados[7]) ? $dados[7] : ""; 
	$dadoSeis 	=  	isset($dados[8]) ? $dados[8] : ""; 
	$dadoSete 	=  	isset($dados[9]) ? $dados[9] : ""; 
	$dadoOito 	=  	isset($dados[10])? $dados[10]: ""; 
	$dadoNove 	=  	isset($dados[11])? $dados[11]: ""; 
	$dadoDez 	=  	isset($dados[12])? $dados[12]: "";


/*********************** INCLUI AS PÁGINAS DO SITE ********************/


//Verifica se o arquivo existe
if(file_exists("$pasta/$arquivo.php") || file_exists("$pasta/$arquivo/$dadoUm.php")){

	//Se o arquivo n for um diretorio inclui do contrario da erro
	include_once((is_file("$pasta/$arquivo.php")) ? "$pasta/$arquivo.php" : "$pasta/$arquivo/$dadoUm.php");

	//Verifica se o arquivo existe
}elseif($pasta == "" && $arquivo == ""){

		//Se o arquivo n for um diretorio inclui do contrario da erro
		include_once((is_file("$pasta.php")) ? "$pasta.php" : "principal.php");

	}else{

		//Do contrario mosta a pagina de erro
		include_once("erros/erro_404.php");
}

/****************** IMPRIME AS PAGINAS NA TELA ************************/

 

Exemplo:

se o usuario digitar http://seusite.com.br/texto/meutexto/3/como-recuperar-os-dados

fica assim:

$pasta = texto;

$arquivo = meutexto;

$dadoUm = 3;

$dadoDois = como-recuperar-os-dados;

 

me interessei por esse exemplo,no meu caso pretendo passar 3 parametros pela url por exemplo:

 

noticia.php ( ou outro arquivo, por exemplo entretenimento.php)

titulo da noticia

id

 

como ficaria essa função??? o meu .access continuaria assim:

 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ([a-z0-9-]+)/([0-9]+)/?$ /news.php?titulo=$1&id=$2 [NC]
</IfModule>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arquivo .htacess

# verifica se o modulo rewrite está habilitado se sim executa o bloco dentro 
# habilita o modulo Rewrite 
Options +FollowSymLinks 
Options All -Indexes 
RewriteEngine On 

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

# Mostra o caminho completo do meu arquivo index.php que caso nenhum desses comandos assim seja valido vai para ele. 
RewriteRule !.(\.rss|\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG|\.ico|\.css|\.js|\.swf|\.SWF|\.flv|\.xml|\.XML|\.htm|\.html|\.pdf|\.rar|\|.txt|\.7z|\.7Z|\.php)$ index.php 

#Redireciona o erro 
ErrorDocument 404 /erros/erro_404.php 
ErrorDocument 500 /erros/erro_500.php

 

Dessa forma todas as paginas do seu site serão avertas no index.php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arquivo .htacess

# verifica se o modulo rewrite está habilitado se sim executa o bloco dentro 
# habilita o modulo Rewrite 
Options +FollowSymLinks 
Options All -Indexes 
RewriteEngine On 

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

# Mostra o caminho completo do meu arquivo index.php que caso nenhum desses comandos assim seja valido vai para ele. 
RewriteRule !.(\.rss|\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG|\.ico|\.css|\.js|\.swf|\.SWF|\.flv|\.xml|\.XML|\.htm|\.html|\.pdf|\.rar|\|.txt|\.7z|\.7Z|\.php)$ index.php 

#Redireciona o erro 
ErrorDocument 404 /erros/erro_404.php 
ErrorDocument 500 /erros/erro_500.php

 

Dessa forma todas as paginas do seu site serão avertas no index.php.

 

mas a minha dúvida é exatamente como posso abrir os registros em arquivos diferentes, como por exemplo:

 

http://localhost/noticias.php?id=1

 

abrir: http://localhost/noticias/titulo/1'>http://localhost/noticias/titulo/1

 

ou ainda melhor: http://localhost/noticias/titulo

 

ou se o arquivo fosse entretenimento.php: http://localhost/entretenimento/titulo

 

Nesse exemplo de .htaccess seria necessário usar também aquele código php q você havia citado anteriormente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas a minha dúvida é exatamente como posso abrir os registros em arquivos diferentes, como por exemplo:

 

http://localhost/noticias.php?id=1

 

abrir: http://localhost/noticias/titulo/1'>http://localhost/noticias/titulo/1

 

ou ainda melhor: http://localhost/noticias/titulo

 

ou se o arquivo fosse entretenimento.php: http://localhost/entretenimento/titulo

 

Nesse exemplo de .htaccess seria necessário usar também aquele código php q você havia citado anteriormente?

 

Também tenho essa dúvida, e outra, dentro do index eu preciso fazer alguma referência ao .htaccess ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas a minha dúvida é exatamente como posso abrir os registros em arquivos diferentes

 

Vamos lá, suponha que tenhamos os seguintes diretorios:

 

seusite/

 

- noticias

-- ver.php

-- todas.php

 

- entretenimento

-- fimes.php

-- fotos.php

 

para ver todas as noticias, faz assim: http://seusite.com.br/noticias/todas

 

para ver as noticias individualmente, faz assim: http://seusite.com.b...rimeira-noticia

 

a mema coisa com o entretenimento:

http://seusite.com.b...enimento/filmes

 

http://seusite.com.b...tenimento/fotos

 

Agora se você quiser abrir um arquivo da raiz é só digitar: http://seusite.com.br/nome-do-arquivo

 

observe que qndo você digita http://seusite.com.br/ na verdade vai abrir http://seusite.com.br/principal (veja o codigo do meu segundo post)

 

 

OBS: Se você tiver testando localmente deve observar que no lugar de "seusite.com.br" dever colocar: localhost/pasta-onde-estao-os-arquivos

 

 

Nesse exemplo de .htaccess seria necessário usar também aquele código php q você havia citado anteriormente?

 

Sim.

 

Também tenho essa dúvida, e outra, dentro do index eu preciso fazer alguma referência ao .htaccess ?

 

Não

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você precisa fazer é pegar os valores da url

$params = explode("/", str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));

 

para cada $params será uma parte do link

ex: www.meusite.com/busca/resultado-da-minha-busca

 

$params[0] = busca

$params[1] = resultado-da-minha-busca

 

pega o valor

nesse caso vamos dizer que existisse a página busca.php

 

então o código ficaria assim

 

if(file_exists($params[0].".php")) {
 include($params[0].".php");
} else {
 include("404.php"); // Página de erro caso tenha criado
}

 

espero ter ajudado!! =DD

 

betinho.pngEquipe Beta

 

 

Como vou incluir os parametros? onde coloco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

apesar de o RewriteEngine estar habilitado no meu apache (inclusive verifiquei pelo phpinfo();) ele tá dando o erro 404

 

como voce ta fazendo? Qual codigo ta usando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu inseri aquele código no arquivo q irá abrir, por exemplo ler.php

 

Ve se tah assim:

 

codigo da pag index.php

//Pega url 
       $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : getenv("REQUEST_URI"); 

               /* O array $dados terá tantos componentes quanto forem digitados pelo usuario por ex.: se ele digitar: 
            	* http://.../eventos/eventos, o array $dados terá 3 componentes: $dados[0]/$dados[1]/$dados[2], 
            	* $dados = explode('/',$url); separa os dados, removendo a '/' do inicio da string 
            	*/ 

               $dados = explode('/',$url); 

               /* Recupera os dados digitados pelo usario*/ 
               $pasta          =   	isset($dados[1]) ? $dados[1] : ""; 
               $arquivo        =   	isset($dados[2]) ? $dados[2] : ""; 
               $dadoUm     	=   	isset($dados[3]) ? $dados[3] : ""; 
               $dadoDois   	=   	isset($dados[4]) ? $dados[4] : ""; 
               $dadoTres   	=   	isset($dados[5]) ? $dados[5] : ""; 
               $dadoQuatro 	=   	isset($dados[6]) ? $dados[6] : ""; 
               $dadoCinco      =   	isset($dados[7]) ? $dados[7] : ""; 
               $dadoSeis   	=   	isset($dados[8]) ? $dados[8] : ""; 
               $dadoSete   	=   	isset($dados[9]) ? $dados[9] : ""; 
               $dadoOito   	=   	isset($dados[10])? $dados[10]: ""; 
               $dadoNove   	=   	isset($dados[11])? $dados[11]: ""; 
               $dadoDez        =   	isset($dados[12])? $dados[12]: "";


/*********************** INCLUI AS PÁGINAS DO SITE ********************/


//Verifica se o arquivo existe
if(file_exists("$pasta/$arquivo.php") || file_exists("$pasta/$arquivo/$dadoUm.php")){

               //Se o arquivo n for um diretorio inclui do contrario da erro
               include_once((is_file("$pasta/$arquivo.php")) ? "$pasta/$arquivo.php" : "$pasta/$arquivo/$dadoUm.php");

               //Verifica se o arquivo existe
       }elseif($pasta == "" && $arquivo == ""){

                       //Se o arquivo n for um diretorio inclui do contrario da erro
                       include_once((is_file("$pasta.php")) ? "$pasta.php" : "principal.php");

               }else{

                       //Do contrario mosta a pagina de erro
                       include_once("erros/erro_404.php");
}

/****************** IMPRIME AS PAGINAS NA TELA ************************/

 

codigo do .htaccess

# verifica se o modulo rewrite está habilitado se sim executa o bloco dentro 
# habilita o modulo Rewrite 
Options +FollowSymLinks 
Options All -Indexes 
RewriteEngine On 

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

# Mostra o caminho completo do meu arquivo index.php que caso nenhum desses comandos assim seja valido vai para ele. 
RewriteRule !.(\.rss|\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG|\.ico|\.css|\.js|\.swf|\.SWF|\.flv|\.xml|\.XML|\.htm|\.html|\.pdf|\.rar|\|.txt|\.7z|\.7Z|\.php)$ index.php 

#Redireciona o erro 
ErrorDocument 404 /erros/erro_404.php 
ErrorDocument 500 /erros/erro_500.php

 

codigo da pagina principal.php

 

<h1> Olá Mundo! </h1>

 

Coloca tudo na raiz e para acessar é so digitar: http://localhost/pasta-do-site/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ve se tah assim:

 

codigo da pag index.php

//Pega url 
       $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : getenv("REQUEST_URI"); 

               /* O array $dados terá tantos componentes quanto forem digitados pelo usuario por ex.: se ele digitar: 
            	* http://.../eventos/eventos, o array $dados terá 3 componentes: $dados[0]/$dados[1]/$dados[2], 
            	* $dados = explode('/',$url); separa os dados, removendo a '/' do inicio da string 
            	*/ 

               $dados = explode('/',$url); 

               /* Recupera os dados digitados pelo usario*/ 
               $pasta          =   	isset($dados[1]) ? $dados[1] : ""; 
               $arquivo        =   	isset($dados[2]) ? $dados[2] : ""; 
               $dadoUm     	=   	isset($dados[3]) ? $dados[3] : ""; 
               $dadoDois   	=   	isset($dados[4]) ? $dados[4] : ""; 
               $dadoTres   	=   	isset($dados[5]) ? $dados[5] : ""; 
               $dadoQuatro 	=   	isset($dados[6]) ? $dados[6] : ""; 
               $dadoCinco      =   	isset($dados[7]) ? $dados[7] : ""; 
               $dadoSeis   	=   	isset($dados[8]) ? $dados[8] : ""; 
               $dadoSete   	=   	isset($dados[9]) ? $dados[9] : ""; 
               $dadoOito   	=   	isset($dados[10])? $dados[10]: ""; 
               $dadoNove   	=   	isset($dados[11])? $dados[11]: ""; 
               $dadoDez        =   	isset($dados[12])? $dados[12]: "";


/*********************** INCLUI AS PÁGINAS DO SITE ********************/


//Verifica se o arquivo existe
if(file_exists("$pasta/$arquivo.php") || file_exists("$pasta/$arquivo/$dadoUm.php")){

               //Se o arquivo n for um diretorio inclui do contrario da erro
               include_once((is_file("$pasta/$arquivo.php")) ? "$pasta/$arquivo.php" : "$pasta/$arquivo/$dadoUm.php");

               //Verifica se o arquivo existe
       }elseif($pasta == "" && $arquivo == ""){

                       //Se o arquivo n for um diretorio inclui do contrario da erro
                       include_once((is_file("$pasta.php")) ? "$pasta.php" : "principal.php");

               }else{

                       //Do contrario mosta a pagina de erro
                       include_once("erros/erro_404.php");
}

/****************** IMPRIME AS PAGINAS NA TELA ************************/

 

codigo do .htaccess

# verifica se o modulo rewrite está habilitado se sim executa o bloco dentro 
# habilita o modulo Rewrite 
Options +FollowSymLinks 
Options All -Indexes 
RewriteEngine On 

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

# Mostra o caminho completo do meu arquivo index.php que caso nenhum desses comandos assim seja valido vai para ele. 
RewriteRule !.(\.rss|\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG|\.ico|\.css|\.js|\.swf|\.SWF|\.flv|\.xml|\.XML|\.htm|\.html|\.pdf|\.rar|\|.txt|\.7z|\.7Z|\.php)$ index.php 

#Redireciona o erro 
ErrorDocument 404 /erros/erro_404.php 
ErrorDocument 500 /erros/erro_500.php

 

codigo da pagina principal.php

 

<h1> Olá Mundo! </h1>

 

Coloca tudo na raiz e para acessar é so digitar: http://localhost/pasta-do-site/

 

quando faço isso e digito localhost/pastadosite ele carrega a página de erro que eu criei e quando digito localhost/pastadosite/principal ele não encontra a página e apresenta a página 404 padrão do apache

 

quando você fala para salvar o htaccess na pasta raiz, você fala na pasta do site não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você fala para salvar o htaccess na pasta raiz, você fala na pasta do site não é?

 

 

Sim.

 

Apaga ou comenta essa linha do .htaccess:

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz um teste jogando todos os arquivos diretamente na pasta htdocs e dessa forma o arquivo principal.php é carregado, porém quando tento acessar o arquivo /news/ler.php?idantes=40 dessa forma localhost/news/ler/40 não consigo.

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.