Ir para conteúdo

Recommended Posts

Boa tarde.

 

Preciso fazer as URL Amigáveis em um site. Na verdade eu nunca soube como configurar, e agora tenho que fazer em um servidor Windows, editando no arquivo web.config.

Procurei bastante mas não consegui encontrar um material que me ajude. Eu sou totalmente leigo nesse tipo de configuração.

 

Venho pedir a ajuda de vocês para conseguir fazer essa configuração ou se alguém tem um material bom para iniciante.

 

Eu tenho dois tipos de links apenas no meu site, e como gostaria de deixar:

www.dominio.com.br/contato.php     =====>     www.dominio.com.br/contato       

www.dominio.com.br/ace-ferragens.php?produto=1000     =====>     www.dominio.com.br/ferragens/1000

Sendo que este 1000 é passado dinamicamente via PHP.

 

Tenho o caso também de eu enviar uma mensagem via GET para mostrar na tela, e também gostaria de deixar de maneira amigável

www.dominio.com.br/contato.php?msg=Teste     =====>     www.dominio.com.br/contato 

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bruno Berlanda Em ambiente Windows você utiliza o módulo URL Rewrite e define as regras através do web.config.

 

Para ocultar extensão dos arquivos:

<rule name="NameRule" stopProcessing="true">
  <match url="(.*)" />
    <conditions>
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="{R:1}.php" />
</rule>

URL com query:

<rule name="NameRule" stopProcessing="true">
  <match url="^ferragens/([^/]+)/?$" />
    <conditions>
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="ace-ferragens.php?produto={R:1}" />
</rule>

Módulo URL Rewrite

 

Att.

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui fazer funcionar.

 

Deixei assim pra fazer um teste:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
		<rewrite>
			<rules>
				<rule name="NameRule" stopProcessing="true">
					<match url="(.*)" />
					<conditions>
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
					</conditions>
					<action type="Rewrite" url="{R:1}.php" />
				</rule>
			</rules>
		</rewrite>
		
		<customErrors mode="On">
			<error statusCode="404" redirect="~/404.html" />
		</customErrors>
    </system.web>
</configuration>

 

Mas retorna erro ao abrir o site, e eu realmente não sei consertar.

 

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

    5: 		
    6: 		<rewrite>
    7: 			<rules>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bruno Berlanda Tente assim:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
    </httpErrors>
    <rewrite>
      <rules>

        <rule name="NameRule" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="{R:1}.php" />
        </rule>

      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Tuas páginas são php mesmo certo?

 

Att.

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Public2004 agora abriu sem erro, e ainda consegui adicionar uns comandos do 301 redirect que estava dando o mesmo erro.

 

Uma dúvida bem amadora agora, eu sempre imaginei que o .php sumiria da URL com essa configuração, mas não né? Eu preciso arrumar todos os meus links agora, ao invés de chamar a nome-da-pagina.php, eu devo chamar a  nome-da-pagina apenas.

 

É isso mesmo, ou estou falando besteira?

 

Muito obrigado mesmo pela ajuda. Me ajudou muito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Public2004 ahh legal. Então imaginei certo. 

 

Só a outra situação que não consegui fazer funcionar, esse caso aqui:

 

<rule name="Ferragens" stopProcessing="true">
	<match url="^ferragens/([^/]+)/?$" />
	<conditions>
		<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
		<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
	</conditions>
	<action type="Rewrite" url="ferragens-detalhes.php?produto={R:1}" />
</rule>

eu tenho esse link: ferragens-detalhes.php?produto=1000

gostaria de deixar assim: ferragens/1000

 

Public, mais uma vez, muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deveria funcionar como desejado. A url ficaria: "ferragens/valor_query_produto".... A não ser que você tenha uma página "ferragens" aí pode conflitar. Se não for isso, mostre como ficou o web.config completo.

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, Public2004 disse:

Deveria funcionar como desejado. A url ficaria: "ferragens/valor_query_produto".... A não ser que você tenha uma página "ferragens" aí pode conflitar. Se não for isso, mostre como ficou o web.config completo.

 

Bom dia!

 

Ah sim, eu tenho uma página chamada ferragens.php mesmo. Onde eu listo todos os produtos. Ao clicar em um produto abre o ferragens-detalhes.php.

 

Vou tentar deixar com outro nome então nesse caso pra fazer um teste.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Public2004 segue:

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
    </httpErrors>
    <rewrite>
      <rules>

        <rule name="Remove Ext" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="{R:1}.php" />
        </rule>
		
		<rule name="Ferragens" stopProcessing="true">
		  <match url="^ferragens-info/([^/]+)/?$" />
			<conditions>
			  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
			  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
			</conditions>
		  <action type="Rewrite" url="ferragens-detalhes.php?produto={R:1}" />
		</rule>

      </rules>
    </rewrite>
  </system.webServer>
</configuration>

 

Ao tentar entrar em ferragens-info/1000 retorna esse erro:

The page cannot be displayed because an internal server error has occurred.

 

Outra coisa, nesse caso não deveria ir para o 404.html?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Public2004 já abusando da sua boa vontade, tem mais uma situação que não estou conseguindo resolver. Queria fazer um redirecionamento dos links antigos para os novos, visto que já está bem indexado os links antigos no google.

 

Eu tentei desta maneira, mas não funcionou:

 

<rule name="NomeRegra" stopProcessing="true">
  <match url="(.*)" />
	<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
	  <add input="{HTTP_HOST}{REQUEST_URI}" pattern="dominio.com.br/nome-da-pagina.php" />
	  <add input="{HTTP_HOST}{REQUEST_URI}" pattern="www.dominio.com.br/nome-da-pagina.php" />
	</conditions>
  <action type="Redirect" url="http://www.dominio.com.br/nome-da-pagina" redirectType="Permanent" />
</rule>

Ao abrir o link antigo retorna o mesmo erro que coloquei no post anterior.

The page cannot be displayed because an internal server error has occurred.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bruno Berlanda Deixe sempre a regra que oculta a extensão dos arquivos por último... Isso deve resolver.

 

Para fazer o "Redirect 301", outra opção seria inserir após a abertura da tag "configuration" o trecho abaixo para cada página a ser redirecionada:

<location path="page_old.php">
  <system.webServer>
    <httpRedirect enabled="true" destination="http://www.domain.com/page_new" httpResponseStatus="Permanent" />
  </system.webServer>
</location>

Ou você pode criar uma página com o mesmo nome da antiga e com a instrução para o redirect.

Em php seria:

<?
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.domain.com/page_new");
?>

Em ASP:

<%@Language=VBScript%>
<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.domain.com/page_new"
Response.End
%>

Att.

  • Obrigado! 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Paulo Oliveira Albuquerque
      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
    • Por 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..
    • Por 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..
    • Por 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
    • Por 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?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.