Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Duarte

redirecionar para sub dominio diferentes

Recommended Posts

Oi, eu gostaria de redirecionar para sub dominios diferentes de acordo com o pais que o usuario esta

 

ex: o usuario esta no Brasil ai direciona para pt.dominio.com

 

se tiver na alemanha de.dominio.com

 

o padrão é dominio.com que seria o site em inglês

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
 <?  function idioma() {
        $http_accept = getenv('HTTP_ACCEPT_LANGUAGE');

        if (isset($http_accept) && strlen($http_accept) > 1) {
            $x = explode(",", $http_accept);
            foreach ($x as $val) {
                if (preg_match("/(.*);q=([0-1]{0,1}.d{0,4})/i", $val, $matches))
                    $lang[$matches[1]] = (float) $matches[2];
                else
                    $lang[$val] = 1.0;
            }

            $qval = 0.0;
            foreach ($lang as $key => $value) {
                if ($value > $qval) {
                    $qval = (float) $value;
                    return $key;
                }
            }
        }
        return self::$tag_default;
    }

switch (idioma()) {
case 'pt-BR': header('Location: http://pt.meusite.com.br');
break;
case 'en-us': header('Location: http://us.meusite.com.br');
break;
}
?>

os codigos de liguagem tu acha aqui ai e so tu imprementar http://www.metamodpro.com/browser-language-codes

Compartilhar este post


Link para o post
Compartilhar em outros sites

HTTP_ACCEPT_LANGUAGE usa o idioma do navegador, apenas.

Se quiser usar como a base a localização do usuário, pense em GeoIP ou mesmo no novo recurso de pegar a localização do usuário (latitude, longitude) do HTML 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu erro, meu site é onpage, então fiz dessa forma

 

function idioma() {
$http_accept = getenv('HTTP_ACCEPT_LANGUAGE');
if (isset($http_accept) && strlen($http_accept) > 1) {
$x = explode(",", $http_accept);
foreach ($x as $val) {
if (preg_match("/(.*);q=([0-1]{0,1}.d{0,4})/i", $val, $matches))
$lang[$matches[1]] = (float) $matches[2];
else
$lang[$val] = 1.0;
}
$qval = 0.0;
foreach ($lang as $key => $value) {
if ($value > $qval) {
$qval = (float) $value;
return $key;
}
}
}
return self::$tag_default;
}
switch (idioma()) {
case 'pt-BR': header('Location: index-pt.phpl');
break;
case 'en-us': header('Location: index.php');
break;
}
Alguém tem ideia do que houve?
Beraldo e Eserra voces recomendam fazer dessa forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu erro, meu site é onpage

Qual erro?

E o que o "onpage" tem a ver com isso?

 

 

Beraldo e Eserra voces recomendam fazer dessa forma?

Não.

Posso estar no Brasil e usar o navegador em inglês ou outro idioma, por questões de estudo (eu faço isso e conheço muita gente que também faz)

 

reparei que quando ta com index.html funciona de boa, e index.php da erro só que minha página precisa ter extenção php

 

o que eu faço?

.html não dá erro pois o código PHP não é interpretado

Qualquer página com código PHP deve ter a extensão .php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro?

E o que o "onpage" tem a ver com isso?

 

 

Não.

Posso estar no Brasil e usar o navegador em inglês ou outro idioma, por questões de estudo (eu faço isso e conheço muita gente que também faz)

 

.html não dá erro pois o código PHP não é interpretado

Qualquer página com código PHP deve ter a extensão .php

 

Mais tem extenção php

 

pt.meudominio.com/index.php

 

o que te errado nisso? não vejo nada errado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais tem extenção php

 

pt.meudominio.com/index.php

 

o que te errado nisso? não vejo nada errado

Você disse que o erro não ocorre quando usa extensão .html. Isso é óbvio, já que o código PHP não foi interpretado

Por isso só ocorre o problema ao usar a extensão .php.

 

 

 

Se o cara não morar no Brasil mas morar em portugual que fala em português também, teria que fazer isso?

 

case 'pt-BR': header('Location: http://pt.dominio.com');
break;
case 'pt': header('Location: http://pt.dominio.com');
break;
???

 

Sim.

Apenas lembrando que é possível associar diversas "case's" a uma ação:

 

 

case "pt-BR":
case "pt":
     header('pt-br.php);
     break;

Compartilhar este post


Link para o post
Compartilhar em outros sites


Acabei resolvendo esse problema da extenção php, agora se o usuario quiser trocar de idioma ta jogando ele direto pra pagina pt.dominio.com nem deixa mudar, o que eu faço?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu mudo direto no barra de endereço de pt.dominio.com para dominio.com não deixa

 

Meu codigo ta assim:

function idioma() {
    $http_accept = getenv('HTTP_ACCEPT_LANGUAGE');


    if (isset($http_accept) && strlen($http_accept) > 1) {
        $x = explode(",", $http_accept);
        foreach ($x as $val) {
            if (preg_match("/(.*);q=([0-1]{0,1}.d{0,4})/i", $val, $matches))
            $lang[$matches[1]] = (float) $matches[2];
            else
                $lang[$val] = 1.0;
        }


        $qval = 0.0;
        foreach ($lang as $key => $value) {
            if ($value > $qval) {
                $qval = (float) $value;
                return $key;
            }
        }
    }
    return self::$tag_default;
}


switch (idioma()) {
    case 'pt-BR': header('Location: http://pt.dominio.com');
    break;
    case 'en-us': header('Location: index.php');
    break;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um "self::" no return, mas o código não está em uma classe. Então remova-o.

 

Faça debug do seu código, mesmo que seja só colocando echo/var_dump. Exiba os valores das variáveis, acompanhe a execução. Só assim saberá por que cada coisa está acontecendo

 

Veja, principalmente, qual é o valor de $http_accept e de $tag_default

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um "self::" no return, mas o código não está em uma classe. Então remova-o.

 

Faça debug do seu código, mesmo que seja só colocando echo/var_dump. Exiba os valores das variáveis, acompanhe a execução. Só assim saberá por que cada coisa está acontecendo

 

Veja, principalmente, qual é o valor de $http_accept e de $tag_default

 

Oi, essa linha que você disse pra remover? return self::$tag_default;

 

se foi essa eu removi e não adiantou

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se você remover a linha, a função não terá retorno algum.

Você tem que retornar a variável, mas sem o "self::"

return $tag_default

 

continua sem funcionar

 

fiz exatamente o que vc falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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