Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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>@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.@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!
Isso mesmo, você terá que alterar todos os links da sua página.
@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 obrigadoDeveria 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.
>
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
@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?@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@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.
Entendi!
Muito obrigado @Public2004.
Me ajudou muitoooo mesmo.
Abraços
Rapaz, só agora estou vendo sua mensagem, talvez tenha até resolvido seu problema mas vamos lá.
Em ASP você tem algumas opções de passar informações entre as páginas.
1 - Por GET, exatamente como você não quer, que seria na URL e de forma mais simples.
2 - Via POST, mas aí seria por FORM e acho que não é o caso.
3 - Por SESSION, que funcionaria mas não seria a opção mais indicada.
4 - E por último trabalhar com COOKIES que entendo ser a mais adequada no seu caso, já que você não quer passar por GET (URL).
Espero ter ajudado.
Att.
@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: