Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos
Estou em vias de desenvolvimento de uma sistema web e também pretendo apresenta-lo na dissertação da Pós-graduação, pois bem um problema vem incomodando bastante.
sempre usei uma padrão nas urls,(talvez até gamby) mas sem funcionava.
portal.php?link=pagina¶metr=
ai de boa, via get recebo a requisição e funciona tudo as mil maravilhas.
mas ai comecei a ver essa URL de forma feia, e depois de vencer a preguiça fui atras de URLs amigaveis, para que o padrão ficasse
portal/pagina/1
Todos os tutoriais que achei, ensinam a modificaras URL, mas quando parte para a passagem dos parâmetros não funciona nada, e visto que há telas onde se passa mais de 2 parâmetros pela URL.
nessa aulas, vi alguns htaccess que me deixaram mais confuso que entedido.
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
esse primeiro ai, que valida pela index.php
<html>
<head>
<title>Home</title>
<meta charset="utf-8">
</head>
<body>
<?php
$url = (isset($_GET['url'])) ? $_GET['url']:'home.php';
$url = array_filter(explode('/',$url));
$file = $url[0].'.php';
var_dump($url);
if(is_file($file)){
include $file;
}else{
include '404.php';
}
?>
</body>
</html>
com esse código passa a URL modificada, mas não passa os parametros, tanto que mesmo com o codigo funcionando ele joga pra pagina 404, pos entende que a variavel esta vazia.
ja este aqui, que na aula passa os parametros
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index2-([0-9]+)-(.*)$ index2.php?id=$1&titulo=$2
não funciona de forma alguma.
Ai me fica esse circo, não consigo modificar as URLS e nem encontar uma boa solução, alguem tem alguma dica, tutorial ou semelhante?
Gabriel, seguindo sua explicação e uns tutoriais consegui fazer roda uma pouco, parecido com o que você desmontrou
$url = (isset($_GET['url'])) ? $_GET['url'] : 'home';
$url = array_filter( explode('/', $url) );
$file = $url[0].'.php';
if (is_file($file)) {
include $file;
}
else{
include '404.php';
}
funciona parecido como o seu, agora me fala, como posso trabalhar com os outros índices do Array, para poder passar os valores?
meu htaccess ficou assim:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA]
@icarof
Achei a explicação do @Gabriel Heming muito boa, mas eu utilizo de outra forma já a muito tempo e funciona perfeitamente pra mim, não sei se te ajudará ou não.
RewriteRule ^URL_DESEJADA$ /URL_DESEJADA/ [R]
RewriteRule ^URL_DESEJADA/$ /URL_DESEJADA.php [PT]
RewriteRule ^URL_DESEJADA/([A-Za-z0-9_-]+)$ /URL_DESEJADA/$1/ [R]
RewriteRule ^URL_DESEJADA/([A-Za-z0-9_-]+)/$ /URL_DESEJADA.php?destino=$1 [PT]
No caso, sempre que necessito passar mais de um parâmetro em alguma URL específica, eu altero as linhas 3 e 4 colocando mais quantas variáveis vou precisar.
Sei que não chega aos pés da aula do acima, mas espero que ajude de alguma forma.
Abraço!
Rasp, ja tentei dessa forma, mas o quando faço a navegação os endereços se misturam, tipo to em
site/blog
ai vou em contato
deveria ficar site/contato
mas fica sempre
site/blog/contato
Olá!
O sr. definiu a tag <base... no seu html?
https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/base
Tente dar uma lida nisso:
>
13 horas atrás, icarof disse:
Rasp, ja tentei dessa forma, mas o quando faço a navegação os endereços se misturam, tipo to em
site/blog
ai vou em contato
deveria ficar site/contato
mas fica sempre
site/blog/contato
@icarof isso acontece pois seus links não estão utilizando a tag base, todos os seus links devem ser /endereço_do_link/, com isso, eles irão retornar sempre a base www.dominio.com.br/, sacou?
>
12 horas atrás, Rasp disse:
@icarof isso acontece pois seus links não estão utilizando a tag base, todos os seus links devem ser /endereço_do_link/, com isso, eles irão retornar sempre a base www.dominio.com.br/, sacou?
acho que estou etendo um pouco, no caso, a barra antes do link, passa a utilizar o endereço base?
Existem algumas formas, como, utilizar uma variável base (leia sobre canonical path):
Ou utilizar a meta tag base:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
Acredito que o que procuras seja o código abaixo:
Options -Indexes
Entretanto, antes de qualquer coisa, é necessário entender o que ele faz, para entender qual é a "mágica" por trás da reescrita de URL
Condicional para o código ser executado apenas se o módulo mod_rewrite.c estiver habilitado/instalado.
RewriteEngine On
Aqui, você deve definir qual é o base path do diretório para reescrita:
RewriteBase /
Ou seja, se a sua URL é http://www.site.com/, o RewriteBase será apenas "/" ou pode ser omitido (pois, é o root). Entretanto, se for http://www.site.com/pasta/subpasta/ o RewriteBase será "/pasta/subpasta/" e não pode ser omitido. É importante entender a base, pois, ela será base da regra de reescrita (RewriteRule).
Ambos abaixo são condicionais, ou seja, são if's. Se algum deles não for verdadeiro, a regra seguinte é ignorada.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Basicamente, as condições são as seguintes:
RewriteRule ^(.*)$ index.php/$1 [L]
A regra, basicamente, é uma expressão regular de reescrita. Antes de entender como a regra de reescrita funciona, é preciso entender o que ele está reescrevendo.
Se lembra, lá em cima, sobre o RewriteBase. Aqui é onde ele se torna parâmetro de reescrita. Vamos supor o seguinte, utilizando a seguinte URL: https://forum.imasters.com.br/topic/566119-passagem-de-parametros-e-reescrita-de-url/
Esta URL é a própria deste tópico. Sendo o RewriteBase o root (apenas "/"), tudo que vier depois, é o que será reescrito, ou seja: topic/566119-passagem-de-parametros-e-reescrita-de-url/
Depois de entender isso, fica fácil entender a RewriteRule.
- ^(.*)$ -> expressão regular. Indica que deve "casar" (match) toda a string, ou seja, tudo que vier após o RewriteBase.
- index.php/$1 -> Indica que deverá ser enviado para index.php/(tudo que casou na expressão regular anterior).
Ou seja, você entrará com a seguinte URL:
https://forum.imasters.com.br/topic/566119-passagem-de-parametros-e-reescrita-de-url/
E o APACHE reescreverá e interpretará como:
https://forum.imasters.com.br/index.php/topic/566119-passagem-de-parametros-e-reescrita-de-url/
Já, no index.php, você precisará do seguinte código para receber a interpretar as variáveis:
array(2) {