Jump to content

Question

Ola bom dia galera  se alguem poderia me dar uma ajuda na minha url amigavél,

Ela funciona de boa 

mais tenho dois problemas que esta me dando já dor de cabeça

1º - Quando abre o link da url ex: meusite.com/produtos/23/nome-produtos  se eu por algo  a mais na frente desta url ela aceita e eu gostaria que que ele não aceitasse nada mais além do que foi feito o chamado  se ele for apenas assim ex2:  meusite.com/produtos/23/nome-produtos que nela não aceita se digitar na frente em um navegador qualquer mais coisa ex3:  meusite.com/produtos/23/nome-produtos-novo-uyuy   e nem aceitar se alguem digitar ou mesmo tentar fazer isso  meusite.com/produtos/23/  ou isso aqui  meusite.com/produtos.php?id=23

 

2ª Minha Url amigavél quando ela e feito o shared em uma rede social quando eu clico dentro da rede social pra abrir a pagina ela esta vindo diferente do que foi postado ele aparece assim quando eu clico para abrir

 

meusite.com/pasta/produtos/23/nome-produtos /><!-- ==================================================================================================================================== --> <link rel=?fbclid=Mgsgs-swwfw-dwedwedwewf-wefwefwhgygygygjhjnjnjnjnjn#.HDHDHDHDJ-messenger

e as vezes assim

meusite.com/pasta/produtos/23/nome-produtos?fbclid=Mgsgs-swwfw-dwedwedwewf-wefwefwhgygygygjhjnjnjnjnjn#.HDHDHDHDJ-messenger

 

era pra ele aparecer assim quando clicar

meusite.com/produtos/23/nome-produtos 

 

No meu HTACCESS ESTA ASSIM

 

#-------------------------------------------------------------------
# PERMISSIONANDO REESCRITA
#-------------------------------------------------------------------
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

#-------------------------------------------------------------------
# EXTENSAO PHP
#-------------------------------------------------------------------
RewriteRule ^(.*)$ $1.php

#-------------------------------------------------------------------
# URL AMIGAVEL
#-------------------------------------------------------------------
RewriteRule ^produtos\/?([0-9]+)\/?(.+)\/?$ produtos.php?id=$1
RewriteRule ^sobre\/?([a-z]+)\/?(.+)\/?$ sobre.php
RewriteRule ^index\/?([a-z]+)\/?(.+)\/?$ index.php
RewriteRule ^contato\/?([a-z]+)\/?(.+)\/?$ contato.php
RewriteRule ^buscar\/?([a-z]+)\/?(.+)\/?$ buscar.php

e a minha função esta assim

 

<?php
    //URL DEBUG CHARACTERS
    function encodeSEOString($string) {
        $string = preg_replace("`\[.*\]`U", "", $string);
        $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string);
        $string = htmlentities($string, ENT_COMPAT, 'utf-8');
        $string = preg_replace("`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i", "\\1", $string);
        $string = preg_replace(array("`[^a-z0-9]`i", "`[-]+`"), "-", $string);
        return strtolower(trim($string, '-'));
    }
    ;
 ?>

Meu link pra abrir a pagina esta assim

 

 <a href="meusite.com/pasta/produto/<?php echo $id; ?>/<?php echo encodeSEOString($prod_nome); ?>">Listar</a>

Obs: como eu disse ela abre normal sem problemas o unico problema que estou tendo foi as que eu sitei ai em cima

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Desculpe a minha audácia aqui...

Mas, por que ao invés de você colocar várias URLs no seu .htacces, você não filtra pelo PHP.

Já que você não quer que seu usuário coloque url/parâmetros que não existam, redirecione com o que você tem da URL.

 

Exemplo:

 

www.seusite.com/produto/23/central-de-ar/modificacao-pelo-usuario

você verifica se tem algo a mais na sua URL e redireciona para:

www.seusite.com/produto/23/central-de-ar

 


Obs.: se preocupar com parâmetros extras não é importante, deveria se preocupar com a segurança dos dados de entrada. 

Share this post


Link to post
Share on other sites
  • 0
19 horas atrás, Paulo Tuan disse:

@quimera Boa noite, poderia me informa de como fazer, pois eu entendo pouco nisso de url...

Não sabemos a estrutura do seu projeto, fica complicado ajudar.

Mas, você dividir a sua URL em Parâmetros dentro do HTACCESS da seguinte forma:

 

Arquivo HTACSS

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Options All -Indexes
DirectoryIndex index.php
RewriteRule ^(.*)$ index.php?pg=$1 [QSA,L]

Classe de gerenciamento de Parâmetros de url (simplificada)

class Url
{
    private static $url = null;
    private static $baseUrl = null;

    /**
     * Retorna a URL base do site
     * @return string
     */
    public static function getBase()
    {
        if (self::$baseUrl != null)
            return self::$baseUrl;

        global $_SERVER;
        $startUrl = strlen($_SERVER["DOCUMENT_ROOT"]);
        $excludeUrl = substr($_SERVER["SCRIPT_FILENAME"], $startUrl, -9);
        if ($excludeUrl[0] == "/")
            self::$baseUrl = $excludeUrl;
        else
            self::$baseUrl = "/" . $excludeUrl;
        return self::$baseUrl;
    }

    /**
     * Retorna a URL baseado no número do parâmetro na URL (começando em zero)
     * @param int $id
     * @return string/null
     */
    public static function getURL($id)
    {
        // Verifica se a lista de URL já foi preenchida
        if (self::$url == null)
            self::getURLList();

        // Valida se existe o ID informado e retorna.
        if (isset(self::$url[$id]))
            return self::$url[$id];

        // Caso não exista o ID, retorna nulo
        return null;
    }
}

 

Uso:

/* Parâmetros que seu site usa geralmente */

$parametroZero = Url::getURL(0);//geralmente a base (a página solicitada)
$parametroUm = Url::getURL(1);
$parametroDois = Url::getURL(2);
$parametroTres = Url::getURL(3);

Agora é só criar uma classe de rotas, assim você pode controlar todas as entradas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By RodrigoWD3
      Boa tarde pessoal nao sei se estou no tópico correto , gostaria de tira uma duvida quero fazer um sistema de noticias com url amigavel  em codeigniter ja fiz a parte de noticias para exibir e a view porem estou usando a id para exibir as noticias e o que eu gostaria de fazer era usar a url do titulo da noticia ficando uma url amigavel alguém teria algum tutorial para eu poder estudar obrigado
    • By Paulo Oliveira Albuquerque
      Ola galera boa noite 
      sou novo aqui e sou bem nub em php e msqli e pdo
      Porem tenho uma url amigavél que funciona para mim perfeita mente sem problemas
      Bom porém quero que ela seja bloqueadas algumas funções por ex: meudominio.com/pasta/produdos/128/computadores-lc
      Entre este meudominio.com/pasta/produdos/128/computadores-lc   quero que meu htaccess ele não deixa por nada entre o meudominio.com/pasta/produdos/128/computadores-lc-alguma-coisa
      ou meudominio.com/pasta/produdos.php?id=128
      quero que ele apenas reconhecer o link direncionado pela url qu seja este aqui meudominio.com/pasta/produdos/128/computadores-lc nada mais
      se alguem tentar por alguma coisa fora desta url ele direciona para o index principal ou motre erro dentro da quela pagina que esta fora da url amigavel
      Ou seja tudos que estiver o ex: meudominio.com/sobre.php
      ele apenas gere o meudominio.com/sobre    sem que ele aceite o .php ou outra outra coisa fora do que esta sendo chamo pelo htaccess ou pela url
      em meus arquivos esta assim a minha url.php
       
      <?php //URL DEBUG CHARACTERS function encodeSEOString($string) { $string = preg_replace("`\[.*\]`U", "", $string); $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string); $string = htmlentities($string, ENT_COMPAT, 'utf-8'); $string = preg_replace("`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i", "\\1", $string); $string = preg_replace(array("`[^a-z0-9]`i", "`[-]+`"), "-", $string); return strtolower(trim($string, '-')); } ; ?> No meu htaccess esta assim
       
      #------------------------------------------------------------------- # PERMISSIONANDO REESCRITA #------------------------------------------------------------------- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f #------------------------------------------------------------------- # EXTENSAO PHP #------------------------------------------------------------------- RewriteRule ^(.*)$ $1.php #------------------------------------------------------------------- # URL AMIGAVEL #------------------------------------------------------------------- RewriteRule ^produto\/?([0-9]+)\/?(.+)\/?$ produto.php?id=$1 RewriteRule ^sobre\/?([a-z]+)\/?(.+)\/?$ sobre.php RewriteRule ^index\/?([a-z]+)\/?(.+)\/?$ index.php  Na minha url que faz a chamad para o direcionamento esta assim
      <div class="hover-text lis-absolute lis-right-20 lis-bottom-20 lis-font-roboto text-white text-right"> <span class="text-white mb-0"><a href="<?php echo ConfigPainel('site_url'); ?>/produtos/<?php echo $id; ?>/<?php echo encodeSEOString($produtos); ?>" target="_blank" title="Clique para ver detalhes"><strong><font color="#fff"><?php echo $produtos; ?></a></font></strong></span></br><span class="lis-font-roboto"><a href="<?php echo ConfigPainel('site_url'); ?>/produtos/<?php echo $id; ?>/<?php echo encodeSEOString($produtos); ?>" target="_blank" title="Clique para ver detalhes"><font color="#fff" size="2"><?php echo VerificaCategoriaItem($dados['id_categoria'],'c_categoria'); ?></font></a></span></div>    Espero que eu possa ter sido bem detalhado ai para que todos possam ver o que eu quero..
    • By Paulo Oliveira Albuquerque
      Ola galera boa noite 
      sou novo aqui e sou bem nub em php e msqli e pdo
      Porem tenho uma url amigavél que funciona para mim perfeita mente sem problemas
      Bom porém quero que ela seja bloqueadas algumas funções por ex: meudominio.com/pasta/produdos/128/computadores-lc
      Entre este meudominio.com/pasta/produdos/128/computadores-lc   quero que meu htaccess ele não deixa por nada entre o meudominio.com/pasta/produdos/128/computadores-lc-alguma-coisa
      ou meudominio.com/pasta/produdos.php?id=128
      quero que ele apenas reconhecer o link direncionado pela url qu seja este aqui meudominio.com/pasta/produdos/128/computadores-lc nada mais
      se alguem tentar por alguma coisa fora desta url ele direciona para o index principal ou motre erro dentro da quela pagina que esta fora da url amigavel
      Ou seja tudos que estiver o ex: meudominio.com/sobre.php
      ele apenas gere o meudominio.com/sobre    sem que ele aceite o .php ou outra outra coisa fora do que esta sendo chamo pelo htaccess ou pela url
      em meus arquivos esta assim a minha url.php
       
      <?php //URL DEBUG CHARACTERS function encodeSEOString($string) { $string = preg_replace("`\[.*\]`U", "", $string); $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string); $string = htmlentities($string, ENT_COMPAT, 'utf-8'); $string = preg_replace("`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i", "\\1", $string); $string = preg_replace(array("`[^a-z0-9]`i", "`[-]+`"), "-", $string); return strtolower(trim($string, '-')); } ; ?> No meu htaccess esta assim
       
      #------------------------------------------------------------------- # PERMISSIONANDO REESCRITA #------------------------------------------------------------------- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f #------------------------------------------------------------------- # EXTENSAO PHP #------------------------------------------------------------------- RewriteRule ^(.*)$ $1.php #------------------------------------------------------------------- # URL AMIGAVEL #------------------------------------------------------------------- RewriteRule ^produto\/?([0-9]+)\/?(.+)\/?$ produto.php?id=$1 RewriteRule ^sobre\/?([a-z]+)\/?(.+)\/?$ sobre.php RewriteRule ^index\/?([a-z]+)\/?(.+)\/?$ index.php  Na minha url que faz a chamad para o direcionamento esta assim
      <div class="hover-text lis-absolute lis-right-20 lis-bottom-20 lis-font-roboto text-white text-right"> <span class="text-white mb-0"><a href="<?php echo ConfigPainel('site_url'); ?>/produtos/<?php echo $id; ?>/<?php echo encodeSEOString($produtos); ?>" target="_blank" title="Clique para ver detalhes"><strong><font color="#fff"><?php echo $produtos; ?></a></font></strong></span></br><span class="lis-font-roboto"><a href="<?php echo ConfigPainel('site_url'); ?>/produtos/<?php echo $id; ?>/<?php echo encodeSEOString($produtos); ?>" target="_blank" title="Clique para ver detalhes"><font color="#fff" size="2"><?php echo VerificaCategoriaItem($dados['id_categoria'],'c_categoria'); ?></font></a></span></div>    Espero que eu possa ter sido bem detalhado ai para que todos possam ver o que eu quero..
    • By Danilo CS
      Olá!
      Eu estou com uma enorme dúvida, e pode ser a razão de um grande problema de meu site. Eu vou contar a história resumidamente:
       
      Até 2017 o meu site chegou a alcançar uns 10 mil views na pesquisa do Google. Esperando aumentar os cliques e, para facilitar a manutenção, resolvi fazer uma reforma geral em meu site. Só que para isso foi necessário tornar as urls amigáveis.
       
      Passou-se 1 ano da reforma e até agora não consegui alcançar os resultados anteriores. Pesquisando ali e aqui, um colega me mostrou um site que busca conteúdos duplicados. E este site aponta duplicidade com o meu próprio site e o mesmo link. Pelo que eu entendi, url´s amigáveis podem ser consideradas como páginas duplicadas já que se pode escrever a mesma página com urls diferentes.
       
      Em meu .htaccess descobri que é esta linha que causa tudo isso, porém é o que faz o site inteiro funcionar:
      RewriteRule ^(.*)$ $1.php Porém, se eu copiar e colar um pedaço do texto diretamente na barra do Google, ele só encontra 1 página.
       
      Portanto, será que eu devo me preocupar com o resultado daquele site? Será que existe algum jeito de resolver isso?
       
      O link que faço o teste é esse: http://www.superdanilof1page.com.br/index.php
       
      O site que acusa duplicidade é esse: https://copywritely.com/
       
      Obrigaduuus
    • By DAJSP83
      Galera estou com o seguinte problema
      preciso personalizar a url http://localhost/site/index.php?categoria=49 para http://localhost/site/categoria/nomedacategoria
      já tentei 
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^([a-zA-Z0-9_-]+)$ categoria.php?categoria=$1 [R=301,L] 
       
      entre outros
       
      não roda no xampp e nem na kinghost
      Já habilitei no apache, mas não roda de maneira alguma
      Alguém poderia me dar um help?
      Alguma solução?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.