Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
E ai galera, tudo bem?
Estou tentando elaborar duas urls "amigaveis" para o mesmo sistema, porem sem sucesso.
-Primeira questão é a seguinte
O sistema ocasionalmente ira receber um código com 20 caracteres (formados por números e letras) através de um link .
Exemplo do link: http://dominio.com.br/aa79asd79a7s0a234khl
Tentei o seguinte
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9].{20})$ index.php?url=$1
-A segunda questão é a seguinte
Para essa questão tenho um arquivo produto.php que recupera o valor do cod conforme abaixo
Exemplo do link: http://dominio.com.br/produto.php?cod=345
Preciso deixar http://dominio.com.br/produto/345
Tentei acrescentar a ultima linha no htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9].{20})$ index.php?url=$1 [NC, QSA, L]
RewriteRule ^produto/([0-9].{5})$ produto.php?cod=$1 [NC, QSA, L]
O problema é que não carrega os arquivos que estão em diretórios como as imagens, styles, videos.....que estão na raiz do sistema.
Por exemplo
<link rel="stylesheet" type="text/css" href="./styles/style1.css">
Não carrega, onde o site fica sem os estilos e assim por diante.
Agradeço desde já!>
4 horas atrás, Omar~ disse:
Tente assim...
htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
A seguinte situação irá acontecer
Quando não for um arquivo: RewriteCond %{REQUEST_FILENAME} !-f
Quando não for um diretório: RewriteCond %{REQUEST_FILENAME} !-d
Qualquer parâmetro da url pós endereço físico será considerado $_GET['url'] e será processado no arquivo index.php: **RewriteRule ^(.*)$ index.php?url=$1**
Então se o endereço seja: **https://seusite/alguma_coisa/outra_coisa** quer dizer que na verdade é:
**https://seusite/index.php?url=alguma_coisa/outra_coisa**
O que você tem que fazer é só separar cada índice, crie um arquivo qualquer e escreva um função como essa:
<?php
function filtrarUrl() {
$filtro = filter_input(INPUT_GET, 'url', FILTER_DEFAULT); // Obtem o que existe na super-global GET
$url = (empty($filtro) ? 'inicio' : $filtro); // Caso $_GET['url'] não tenha nada seu valor será "inicio" caso contrário será o que tenha
$separa = explode('/', $url); // Separa todos os índices de $_GET['url'] pelas barras "/"
$retorno = array_filter($separa); // Caso algum índice seja nulo ele é removido do array
return ($retorno); // Retorna o array
}
Então no arquivo index.php fazemos um require no arquivo que contém a função e definimos o valor de url para o retorno da função:
$url = filtrarUrl();
Teremos um array que no caso da url assim:
https://seusite/entrada-a/entrada-b/entrada-c
O valor de $url será:
$url = [
[0] => 'entrada-a',
[1] => 'entrada-b',
[2] => 'entrada-c'
];
Assim sendo fica fácil manipular dinamicamente o conteúdo.
Por exemplo no index.php
switch ($url[0]) {
case 'inicio':
include ('arquivo_a.php'); // Arquivo que será incluso caso o endereço seja "https://seusite.com/"
break;
case 'alguma_outro_valor':
include ('arquivo_b.php'); // Arquivo que será incluso caso o endereço seja "https://seusite.com/alguma_outro_valor/"
break;
default:
include ('algum_coisa.php'); // Se caso algum valor não seja o que você definiu nessa bateria
break;
}
Então se você deseja:
**https://seusite/produto/345**
Verifique o valor de url[0] for produto se sim inclua o arquivo responsável e nesse arquivo verifique se o valor de url[1] é 345 "Acho que dar para entender"
Na questão de arquivos CSS e JS imagens etc... Quando você reescreveu o apache, seu servidor sabe que esses índices criados só são uma reescrita, o browser não.
Então se você está em https://seusite/teste. O browser acredita que você está em um diretório com nome "teste".
Assim sendo uma imagem requisitada está assim: **<img src="arquivo.jpg" alt="" />**
Deveria está assim: **<img src="../arquivo.jpg" alt="" />**
O problema que se deixar o ../ caso não esteja em um sub diretório esses pontos e barras vão causar também perda da imagem.
Para solucionar você deve verificar quantas entradas de url existem e aplicar o retorno de diretório a elas.
Outra forma é usar o próprio HTML para tal, apenas adicionando a tag <base> como primeiro parâmetro da tag <head> exemplo:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<base href="https://endereco_do_site.com">
Dê uma olhada nesse exemplo, é quase a mesma coisa que eu disse aqui:
[https://github.com/Spell-Master/Get-UrlAmigavel](https://github.com/Spell-Master/Get-UrlAmigavel)
Obrigado...ajudou muito....lendo isso aí fiz até mais do que precisava....melhorou muito as idéias......valeu....
Além, tinha algo que estava influenciando os erros, que é o fato de não pode haver espaços em branco nas flags [NC, QSA, L].....removi os espaços e funcionou.... [NC,QSA,L]....eu não sabia e espero que ajude outros.....E ai tudo bem galera?
Embora eu tive muito sucesso me deparei com outro problema!
Error 404
Tentei o seguinte.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9].{20})$ index.php?url=$1 [NC,QSA,L] #aqui esta okay agora...
RewriteRule ^produto/([0-9].{5})$ produto.php?cod=$1 [NC,QSA,L] #aqui esta okay agora...
#RewriteRule ^lista$ lista.php [NC,QSA,L] #se for dominio.com.br/lista tudo bem.......
#se for dominio.com.br/lista/ Error 404.....em função da barra
Tentei
#RewriteRule ^lista\/?$ lista.php [NC,QSA,L] #mas sem sucesso.....styles e diretorios bugam...
Tentei
#RewriteCond %{REQUEST_FILENAME} -f #se for aquivo....
#RewriteRule ^lista\/?$ lista.php [NC,QSA,L] #mas sem sucesso.....styles e diretorios bugam...
Tentei
RewriteEngine on #sim...fiz isso tambem...
RewriteCond %{REQUEST_FILENAME} -f #se for aquivo....
RewriteRule ^lista\/?$ lista.php [NC,QSA,L] #mas sem sucesso.....styles e diretorios bugam...
e muitas outras coisas........mas sem sucesso.....
O que quero é que quando a url for dominio.com.br/lista OU dominio.com.br/lista/, ou seja, quando depois da lista tiver ou não a barra, o arquivo seja carregado....
Tem como?
Embora eu tenha lido muito o conteúdo acima, não resolvi essa questão.
Tente assim...
htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
A seguinte situação irá acontecer
Quando não for um arquivo: RewriteCond %{REQUEST_FILENAME} !-f
Quando não for um diretório: RewriteCond %{REQUEST_FILENAME} !-d
$url = [
[0] => 'entrada-a',
[1] => 'entrada-b',
[2] => 'entrada-c'
switch ($url[0]) {
case 'inicio':
include ('arquivo_a.php'); // Arquivo que será incluso caso o endereço seja "https://seusite.com/"
<!DOCTYPE html>