Jump to content
onedev

Apontamento CNAME de domínios para url amigável

Recommended Posts

Olá Pessoal tudo bem?

Preciso apontar vários domínios para uma aplicação ASP que gera url amigáveis, por exemplo:

o domínio www.nomedocliente1.com  deverá abrir o conteúdo de www.aplicacao.com/cliente/nomedocliente1    
o domínio www.nomedocliente2.com  deverá abrir o conteúdo de www.aplicacao.com/cliente/nomedocliente2 
o domínio www.nomedocliente3.com  deverá abrir o conteúdo de www.aplicacao.com/cliente/nomedocliente3      

Será necessário criar um registro manual em cada domínio, apontando a entrada CNAME de www.nomedocliente1.com para www.aplicacao.com.

Minha dúvida seria quanto ao código ASP que deve ser desenvolvido na aplicação para reconhecer o acesso de um visitante de um determinado domínio, por exemplo www.nomedocliente1.com e com isso passar a variável do login do cliente "nomedocliente1" para a aplicação, dessa forma permitindo identificação do cliente e exibição do conteúdo correto. 

Esse estratégia é utilizando por grandes plataformas de e-commerce por exemplo, que desenvolvem apenas 1 código fonte para a aplicação que fica compartilhada com milhares de clientes. A questão é como essa aplicação consegue exibir o conteúdo correto para o visitante de acordo com o domínio acessado? 

Acredito que é um assunto interessante, que possa ser útil para outros desenvolvedores. 
Será que alguém que tenha conhecimento sobre como resolver a questão possa dar alguma dica?

Estou pesquisando muito sobre o assunto, conseguindo mais informações vou compartilhar aqui também.
Obrigado desde já.

 

Share this post


Link to post
Share on other sites

olha este exemplo,

sistema de url amigável sem o uso do ISAPI Rewrite mas com algumas limitações, não tenho muito conhecimento em programação mas com ajuda de muitos aqui do forum consegui chegar a um resultado satisfatório, aí vem uns e perguntam: mas você pode usar o componente ISAPI-Rewrite que resolve o problema, mas o problema é que eu não posso migrar de servidor pois nem todos tem instalado todos componentes que uso em meus sites, e como tenho sites com mais de 20.000 fotos cadastradas com resolução de 1.200x800 pixels sem contar as miniaturas, então daria um trabalho imenso para migrar tudo isso e mais um pouco.

Então vamos vamos à parte que mais deu trabalho que foi a codificação de caracteres, já faz 15 dias que eu estou tentando de tudo para acertar os benditos acentos, já salvei as páginas com codificação utf-8, iso-8859-1, Latim 1, ASCII.

Já mudei no banco de dados conforme a codificação das páginas, já fiz de tudo e nada, então estou postando todo trabalho para que alguém teste e encontre uma solução:

 

INSTRUÇÕES:

1 - coloque endereço completo em todas âncoras das páginas que levam a exibição dos dados, incluindo o endereço do arquivo .css
2 - crie uma página idêntica à página que recebe os dados, exemplo(produtos.asp) para (produtos2.asp)
3 - coloque o endereço completo de de url em todos os links de todas as páginas, assim como no arquivo .css.
4 - crie pastas com os nomes de todas sessões e/ou categorias existentes separados por (-) ex:(receitas-com-aves) em seu site e dê as devidas permissões de escrita e leitura.
5 - crie uma tabela no bancos de dados chamada "sitemaps" contendo os campos ("id" AUTO_INCREMENT) e ("url" longtext) com as configurações: CHARSET=utf8 COLLATE=utf8_general_ci .
6 - lembre-se de setar as permissões onde os arquivos serão gravados assim como seu seu arquivo sitemap.txt .
7 - crie uma página com o nome "criar-pagina.asp" .

Obs: o problema é que eu acho que não serve para lojas virtuais.


vamos então, abra o arquivo que recebe os dados(produtos.asp) e coloque as instruções abaixo da consulta que mostra os dados:

'Aqui eu informo a sessão do produto substituindo os espaços por traço, eu acho que não preciso mostrar as outras variáveis.

'Aqui eu fiz uma consulta no banco e recuperei a sessão o produto que estava cadastrado.
    sessaoMenu = replace(LCase(strNomeSessao)," ","-")  

    If Request.QueryString("produto") <> "" Then

'Informe todas variáveis do produto na url arquivo (produtos2.asp) que é a cópia criada por você, no meu caso eu estou passando outras variáveis pela url porque preciso delas para compor as metas tags do meu cabeçalho.
    srturl =  ("http://www.seusite.com.br/produtos2.asp?produto="&intProdID&"&nome="&strNomeProduto&"&sessao="&sessaoMenu&"&tag="&strTag&"&descricao="&strDescricao&"&imagem="&strImagem&"")

'Aqui redireciona para a página criar-pagina.asp passando as variáveis informadas acima.
Response.Redirect ("criar-pagina.asp?SURL="&srturl&"")

Else

 

 

'Fechar a condição no final da página.
   end if

criar-pagina.asp

<%

Dim strProdID
Dim strNomeProduto
Dim StrSURL
Dim strSessao
Dim strTag
Dim strNota
Dim strImagem
Dim CAcento
Dim SAcento
Dim titulo
Dim pagina
Dim caminho
Dim link
Dim strSite
Dim strCodigo
Dim codigo
Dim xmlhttp
Dim GRAVAR
Dim FSO
Dim htmlspecialchars_decode
Dim strEnderecoPagina
Dim sitemaps
Dim link_sitemap
Dim caminho_sitemap
Dim ArqTxt

'Função para remover acentos.

   Function TirarAcento(Palavra)
   CAcento = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñѺª"
   SAcento = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
   Texto = ""
   If Palavra <> "" then
           For X = 1 To Len(Palavra)
               Letra = Mid(Palavra,X,1)
               Pos_Acento = InStr(CAcento,Letra)
               If Pos_Acento > 0 Then Letra = mid(SAcento,Pos_Acento,1)
               Texto = Texto & Letra
           Next
           TirarAcento = Texto
   End If
   End Function  

'Função para decodificar o conteúdo.
    Function htmlspecialchars_decode(someString)
    htmlspecialchars_decode = replace(replace(replace(replace(someString, "&amp;", "&"), "&gt;", ">"), "&lt;", "<"), "&quot;", """")
    End Function


' ------------------------------------------------------------------------------

'Recupera as variáveis.
          strNomeProduto = Request.QueryString("nome")
          strSURL = Request.QueryString("SURL")
          strSessao = Request.QueryString("sessao")
          strTag = Request.QueryString("tag")
          strDescricao = Request.QueryString("descricao")
          strImagem = Request.QueryString("imagem")

'Tratando as variáveis com replace para substituir espaços por traço e em letras minúsculas, e removendo acentos.
          strNomeProduto = replace(TirarAcento(LCase(strNomeProduto))," ","-")
          strSessao = replace(TirarAcento(LCase(strSessao))," ","-")

'Informe aqui o endereço do seu site, não remova a barra.
          strSite = "http://www.seusite.com.br/"

'Aqui vamos montar o nome da nova página com a extensão html.
          titulo = strNomeProduto&".html"

'Aqui informamos a pasta onde será gravada a nova página.
          pasta = strSessao&"/"&titulo

'Aqui informamos o link da página a ser acessada.
         link =  strSURL&"&nome="&strNomeProduto&"&descricao="&strDescricao&"&tag="&strTag&"&imagem="&strImagem


' ------------------------------------------------------------------------------

'Aqui acessamos a página informada e pegamos o código fonte dela.
Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "GET",link, False
xmlhttp.setRequestHeader "ContentType","text/html"
xmlhttp.setRequestHeader "charset","utf-8"       'use a codificação que melhor lhe atender
xmlhttp.setRequestHeader "Encoding","utf-8"      'use a codificação que melhor lhe atender
xmlhttp.Send
strCodigo =  xmlhttp.ResponseText
codigo = Server.HTMLEncode(strCodigo)


' ------------------------------------------------------------------------------

'Aqui criamos o objeto para gravar a página na pasta conforme sua sessão.
   Set FSO = Server.CreateObject("Scripting.FileSystemObject")
   caminho = Server.MapPath(pasta)
   
   Set GRAVAR = FSO.CreateTextFile(caminho,true)

'Aqui gravamos todo código fonte dentro da nova página.
   gravar.write htmlspecialchars_decode(codigo)
   gravar.close

' ------------------------------------------------------------------------------

'Aqui informamos o endereço completo da nova página.
    strEnderecoPagina = strSite&pasta

'Gravamos o endereço da nova página no banco de dados,e verificamos se já existe o mesmo nome gravado, OBS. coloque um include que faz a conexão com seu banco de dados.
   Set sitemaps = abredb.Execute("SELECT * FROM sitemaps WHERE url='"& strEnderecoPagina &"';")

   if sitemaps.eof and sitemaps.bof then
     link_sitemap = strEnderecoPagina

     sitemaps = "INSERT INTO sitemaps (url) VALUES ('"&link_sitemap&"')"
     abredb.execute(sitemaps)

'Com a mesma condição vamos gravar um novo link no arquivo sitemap.txt.
     Set FSO = Server.CreateObject("Scripting.FileSystemObject")
     caminho_sitemap = "c:/domains/seusite.com.br/wwwroot/sitemap.txt"

'O parâmetro forReading é utilizado somente para leitura.
     Const forReading = 1, forWriting = 2, forAppending = 8

'Instancia o objeto FSO.
    Set Fso = CreateObject("Scripting.FileSystemObject")

'Abre o arquivo com o método OpenTextFile.
    Set ArqTxt = Fso.OpenTextFile(caminho_sitemap,8,True)

'Arquivo aberto, escreve no arquivo.
    ArqTxt.WriteLine link_sitemap

'Fecha o arquivo com o método Close.
    ArqTxt.Close

'Destrói o objeto.
    Set ArqTxt = nothing


  else

  strEnderecoPagina = strEnderecoPagina

  end if

  sitemaps.close
  sitemaps.nothing

' ------------------------------------------------------------------------------

'Pronto, fazemos um redirecionamento para a página recém criada.
Response.Redirect strEnderecoPagina

%>

Share this post


Link to post
Share on other sites

xanburzum, sua resposta não tem nenhuma relação com o assunto do tópico. Mas nenhuma mesmo kkkkk... você deve estar bem chapado.

Bom, pesquisei bastante e a forma de resolver é instalando um componente de ASP DNS no servidor para conseguir fazer DNS reverso no domínio que está acessando o código fonte e com isso conseguir pegar o código de identificação inserido em um registro CNAME nesse domínio. Dessa forma conseguiremos o código de identificação da conta.


 

Share this post


Link to post
Share on other sites

onedev, para cada dominio  www.nomedocliente1.com terá uma página default.asp? ou todos os dominios abrem uma mesma página padrão?

 

 www.nomedocliente1.com  deverá abrir o conteúdo de www.aplicacao.com/cliente/nomedocliente1

 

dominio = Request.ServerVariables("server_name")

 

nomedocliente = replace(dominio,"www.","")

nomedocliente = replace(dominio,".com","")

 

linkmontado = "www.aplicacao.com/cliente/" & nomedocliente

 

só abrir o linkmontado num iframe assim não vai mudar a url original

 

Share this post


Link to post
Share on other sites

CNAME é a nível da resolução de nomes de dominíos, -no [protocolo de comunicação] HTTP- o header Host vai apontar pro alias do seu CNAME (i.e o que foi digitado na barra de endereços).

Aponta o alias e processa esse header na implementação da funcionalidade/comportamento intendido.Simples.

Haveria alguma dúvida de como fazer isso em ASP ou alguma stack específica?

 

P.s

Quote

Bom, pesquisei bastante e a forma de resolver é instalando um componente de ASP DNS no servidor para conseguir fazer DNS reverso no domínio que está acessando o código fonte e com isso conseguir pegar o código de identificação inserido em um registro CNAME nesse domínio. Dessa forma conseguiremos o código de identificação da conta.

 

Não fez muito sentido o que você falou.Tá pensando sem base conceitual alguma.

 

"fazer DNS reverso [sic] no domínio [sic] que está acessando o código fonte [sic] e com isso conseguir pegar o código de identificação inserido em um registro CNAME [sic] nesse domínio [sic]" [sic]

 

"Remendo":

"fazer DNS reverso [sic] no domínio [cliente] que está acessando o código fonte [a aplicação] e com isso conseguir pegar o código de identificação inserido [sic] em um registro CNAME [sic] nesse domínio [para/associados a esse domínio]"

 

Não quero me extender mais.

Share this post


Link to post
Share on other sites

Funcionou com alias de domínio do plesk. Então vários domínios usam um mesmo código ASP, e nesse código ASP eu consigo identificar qual é o domínios através de Server Variables e com isso filtro apenas os dados no banco de um domínio específico. 

O problema é que demanda uma ação manual no plesk para registrar cada domínio no servidor. 

Alguém saberia me dar uma dica de como automatizar esse processo? Estou criando uma pequena plataforma de serviços e preciso permitir que os usuários possam utilizar domínio próprio para usar os serviços dessa plataforma. Então os usuários teriam primeiro que se cadastrar na plataforma informando o seu domínio, depois alterar a entrada DNS de seu domínio para o servidor da plataforma que conseguirá identificar o domínio do usuário para filtrar seus dados.

Alguém pode ajudar? To levando vários dias estudando isso e não finalizo.

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 s3c0
      Fala galera,
       
      boa tarde. Estou precisar criar uma página para recuperar algumas informações do PC.
       
      Achei um script, porém a informação não é visualizado na página.
       
      Segue script
      <% Set objShell = server.CreateObject("WScript.Shell") Set objExec = objShell.Exec("cmd /c powershell wmic cpu get loadpercentage") Set objStdOut = objExec.StdOut response.write "CPU:<BR>" While Not objStdOut.AtEndOfStream Response.write objStdOut.ReadLine &"<BR>" Wend objExec.StdIn.Close() %> Alguém tem alguma ideia do que está errado?
       
      Agradeço a atenção de todos!
    • By Jack Oliveira
      Bom dia @Motta Poderia me dar uma pequena ajuda aqui
      estou com uma url amigavel
      ela funciona usando ex: meudominio.com/cidade/nome-do-post/12/
      quero que ele apenas pega o titulo no banco de dados sem precisar pegar o id
      minha url é bem básica
      no meu .HTACCESS
      Fiz assim
      DirectoryIndex index.php ErrorDocument 404 https://www.meusite.com.br/ RewriteCond %{HTTP_HOST} ^meusite\.com\.br$ [OR] RewriteCond %{HTTP_HOST} ^www\.meusite\.com\.br$ [OR] RewriteCond %{HTTP_HOST} ^meusite\.com\.br\/$ RewriteRule ^index\.html\/?(.*)$ "https\:\/\/www\.meusite\.com\.br\/$1" [R=301,L] #------------------------------------------------------------------- #------------------------------------------------------------------- # PERMISSIONANDO REESCRITA #------------------------------------------------------------------- RewriteEngine On # Turn on the rewriting engine # not rewrite css, js and images RewriteCond %{REQUEST_URI} !\.(?:css|js|jpg|gif|png)$ [NC] RewriteRule ^([0-9A-z_-]+)\/([0-9A-z_-]+)\/$ noticias.php?&nome=$1id=$2 [QSA,L,NC] #RewriteRule ^([0-9A-z_-]+)\/([0-9A-z_-]+)\/$ cidade.php?id=$1&nome$2 [QSA,L,NC] #RewriteRule ^buscar index.php [NC,L] <IfModule mod_headers.c> <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> </IfModule> No arquivo noticias.php
      quero que ele ficasse assim
      meusite.com.br/cidade/noticias-do-mundo-geral/
       
      Na 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, '-')); } ; ?> No html fiz assim
       
      <a href="./<?php echo encodeSEOString($dados['titulo']); ?>/<?php echo $dados["id"]; ?>/" target="_blank"> nesta forma ai em cima ele funciona mais quando inverto para pegar apenas o titulo ele volta para a url principal
      Antes tinha feito assim
      <a href="./<?php echo encodeSEOString($dados['titulo']); ?>/" target="_blank">
       
      Desde já agradeço...
    • By portallweb
      Bom dia, pessoal.
       
      A questão é que eu consigo acessar um endereço "dominio.com/modulo/id/titulo" e ele reescrever para "dominio.com/default.asp?link=artigo&id=123&titulo=teste", mas minha dúvida é se consigo fazer o processo reverso, ou seja, acessar "dominio.com/default.asp?link=artigo&id=123&titulo=teste" e ele alterar para "dominio.com/modulo/id/titulo".
       
      Códigos:
       
      WEB.CONFIG
       
      <?xml version="1.0" encoding="UTF-8"?> <system.webServer>     <rewrite>         <rules>             <rule name="artigo" stopProcessing="true">                 <match url="^artigo/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?$" />                 <conditions>                      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />                      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />                  </conditions>                 <action type="Rewrite" url="default.asp?link={R:0}&id={R:1}&teste={R:2}" />             </rule>         </rules>     </rewrite> </system.webServer>  
      ASP
       
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"/> <title>Teste Isapi Rewrite</title> </head> <body> <p> Teste!<br> link: <%=request("link")%><br> id: <%=request("id")%><br> teste: <%=request("teste")%><br> </p> </body> </html>  
      Desde já agradeço!
    • By fsanchez
      Olá Pessoal!
       
       
      Para auxilio de outros desenvolvedores que estão iniciando com WEBHOOK, segue algumas dicas que obtive desenvolvendo um webhook.
       
      Webhook de forma resumida:
       
      - Webhooks permitem criar integrações que comunicam eventos ocorridos nos documentos da plataforma da Clicksign. Quando um evento ocorre, a Clicksign notifica a sua aplicação imediatamente, através de uma requisição HTTP POST para a URL previamente cadastrada.
       
      Eventos dentro do webhook
      - Quando ocorrerem eventos nos documentos, uma requisição HTTP POST será disparada para a URL previamente cadastrada nas configurações da conta. 
       
      Aqui que vem a dica:
      O servidor cliente faz uma requisição, e aguarda uma resposta da sua aplicação, informando se você recebeu a requisição:
      - Responda a requisição do Webhook com uma resposta HTTP 200 OK. Qualquer resposta fora do intervalo 2XX informará que você não recebeu seu webhook.
       
      exemplo em  ASP :
       
      Response.ContentType = "application/json"
      Response.Status="HTTP/1.1 200 OK"
       
      Depois é só alegria, tratar dados recebidos.
      exemplo:
       
      ATRAVES DO SERVERVARIABLES CONSIGO OBERTER O RESULTADO DA REQUISIÇÃO

      cabecalho_completo = Request.ServerVariables("ALL_HTTP") 
      content_type = Request.ServerVariables("CONTENT_TYPE")
      ...etc...
       
       
      Pra voce conseguir pegar o json, isso em ASP,  será necessario converte - lo em Tipo Byte, depois em String para você se quiser obter alguma tag do JSON para algum tratamento.
      exemplo:
       
      Dim lngBytesCount
      lngBytesCount = Request.TotalBytes
      jsonstring = BytesToStr(Request.BinaryRead(lngBytesCount))

      Function BytesToStr(bytes)
          Dim Stream
          Set Stream = Server.CreateObject("Adodb.Stream")
          Stream.Type = 1 'tipo de dados binarios
              Stream.Open
              Stream.Write bytes
              Stream.Position = 0
          Stream.Type = 2 'tipo de dados texto
              Stream.Charset = "iso-8859-1"
              BytesToStr = Stream.ReadText
              Stream.Close
          Set Stream = Nothing
      End Function

      'Instancio o obejto JSON'
      Set oJSON = New aspJSON
      'Carrego a String JSON
      oJSON.loadJSON(jsonstring)
      'Obter valor simples
      nome_tag = oJSON.data("tagJSON").item("tagJSON")
       
       
       
       
       
    • By fsanchez
      Como Posso recuperar o retorno do JSON que foi enviado via POST de uma requisição Webhook em asp classic.
       
      Precisaria mais ou menos assim:
       
      POST / HTTP/1.1 Host: testecrm.requestcatcher.com Accept: */* Accept-Encoding: gzip, deflate Content-Hmac: sha256=fc9e789996bdd63c0f03dacccb1ef992310d8516d9e8673bce5b1d0825100cda Content-Length: 5363 Content-Type: application/json Event: add_signer User-Agent: rest-client/2.0.2 (linux-musl x86_64) ruby/2.6.3p62 X-Newrelic-Id: VQUDV1JXGwICU1RWBggDUg== X-Newrelic-Transaction: PxQHAAQGDldRU1lWVgUGAFIIFB8EBw8RVU4aUllaUQRXBA5ZBQAHUwIADkNKQQoKA1IAVwAEFTs=  
       
×

Important Information

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