Ir para conteúdo

POWERED BY:

Arquivado

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

Prove Yourself

[Resolvido] Entendendo o mod_rewrite de uma vez por todas!

Recommended Posts

Encontrei um post de um blog que ensina como fazer reescrita de URL's. Tentei aqui e consegui fazer funcionar mas ainda sim está muito confuso na minha cabeça.

 

Utilizei os seguintes arquivos, de um forma extremamente simples, apenas para aprender como a reescrita de URL's funciona:

 

.htaccess

RewriteEngine On
RewriteRule ^index\/?(.+)\/?(.+)\/?$ index.php?pagina=$1

index.php

<?php
error_reporting(E_ALL);
?>
<html>
	<head>
		<title>TESTE DO MOD_REWRITE</title>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
	</head>
	<body>
	<?php
	if(isset($_GET['pagina'])) {
		switch($_GET['pagina']) {
			case 'contato':
				require_once('contato.php');
				break;
			case 'noticias':
				require_once('noticias.php');
				break;
			default:
				require_once('principal.php');
				break;
		}
	}
	?>
	</body>
</html>

principal.php

<h1>PRINCIPAL</h1>
<p>Blá blá!</p>

contato.php

<h1>CONTATO!</h1>
<p>Contato de tal e tal do tal!</p>
noticias.php

<h1>NOTÍCIAS</h1>
<p>Notícia</p>
<p>Notícia</p>
<p>Notícia</p>
<p>Notícia</p>
<p>Notícia</p>

Meu site está localizado na pasta /var/www/mod_rewrite/ . Quando digito no browser localhost/mod_rewrite/, localhost/mod_rewrite/contato, localhost/mod_rewrite/noticias, são carregadas, respectivamente, as páginas principal.php, contato.php e noticias. Se eu digitar localhost/mod_rewrite/lixo, por exemplo, recebo um

 

Not Found

The requested URL /mod_rewrite/lixo was not found on this server.
Apache/2.2.13 (Debian) Server at localhost Port 80

Não entendi porque ele não carrega a página principal.php, já que deveria entrar no default do switch.

 

Tenho muitas dúvidas de como isso tudo funciona.

Por exemplo, o que acontece quando o usuário digita o endereço no browser?

O que a primeira parte (^index\/?(.+)\/?(.+)\/?$) significa na regra de rewrite? Essa parte diz como a URL vai ficar?

O que é o index.php no começo? Qual o significado? Percebi que depois da reescrita, ele some da URL.

E a segunda parte (index.php?pagina=$1) ? O que é o $1 ?

Como http://localhost/mod_rewrite/index.php?pagina=contato se transforma em http://localhost/mod_rewrite/contato ?

 

Muito obrigado, aguardo respostas. Enquanto isso vou continuar pesquisando. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo! Finalmente consegui entender o necessário para reescrever URL's! Esse vídeo me ajudou muito! Muito obrigado.

Se servir para alguém, seguem os exemplos baseados no vídeo.

 

# Habilita o mod_rewrite
RewriteEngine On

# Se o usuário digitar exatamente "google" (localhost/blog/google), ele será redirecionado para a página http://www.google.com.br
# RewriteRule ^google$ http://www.google.com.br

# Se o usuário, por exemplo, digitou localhost/blog/cachorro, então ele será redirecionado para www.cachorro.com.br.
#RewriteRule (.*) http://www.$1.com.br

# Se o usuário digitar, por exemplo, localhost/blog/bad/guys, ele será redirecionado para www.badguys.com.
#RewriteRule (.+)\/(.+) http://www.$1$2.com

# Se o usuário digitar, por exemplo, localhost/blog/arquivos/imagem.png, ele será redirecionado para localhost/blog/imagem.jpg
#RewriteRule ^arquivos\/(.+)\.png imagens/$1.jpg

# Se o usuário digitar, por exemplo, localhost/blog/amarelo.html, ele será redirecionado para localhost/blog/vermelho.html
#RewriteRule ^amarelo.html$ vermelho.html

# Se o usuário digitar, por exemplo, localhost/blog/proibido, ele será redirecionado para a página de acesso negado. A flag [F] de forbidden.
#RewriteRule ^proibido$ - [F]

# Se o usuário digitar, por exemplo, 'naoexiste', ele será redirecionado para a página de "gone". Flag [G] de gone e flag [NC] de no case.
#RewriteRule ^naoexiste$ - [G,NC]

# [QSA] = Query string append. Por exemplo, se o usuário digitar localhost/blog/index.asp?pag=contato a query string pag=contato será adicionada em index.php
#RewriteRule index.asp index.php [QSA]

A única coisa que não entendi é o RewriteCond. Não entendi muito bem pq usar. Valeu gente. Obrigado pela ajuda.

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.