.htaccess redirecionamento de remapeamento em subdomínio diferente

1

Estou tentando tornar meu aplicativo AngularJS detectável pelas redes sociais e me deparei com a seguinte página do github:

link

No entanto, fiquei preso na etapa .htaccess . O código a seguir está sendo usado para redirecionar (usando o remapeamento) os bots do facebook / twitter / google para um URL diferente (no mesmo domínio):

<ifModule mod_rewrite.c>
 RewriteEngine On

# allow social media crawlers to work by redirecting them to a server-rendered static version on the page
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteRule album/(\d*)$ http://www.michaelbromley.co.uk/experiments/angular-social-demo/server/static-page.php?id=$1 [P]

</ifModule>

O que estou tentando fazer é muito semelhante ao que ele fez, no entanto, minha API é um subdomínio.

O remapeamento de redirecionamento .htaccess é possível quando um subdomínio diferente é usado?

Exemplo:

http://www.example.com/test/123 remape para http://api.example.com/title/test/123 e mantenha o URL do navegador como http://www.example.com/test/123 .

    
por Coder 14.04.2017 / 20:06

1 resposta

1

Se você precisar apenas de link , remapeie para link sem redirecionamento em geral, ou seja, sem necessidade da condição especial HTTP_USER_AGENT :

Conteúdo no servidor externo

Se você precisar manter a parte do domínio do URL do navegador como está e o conteúdo estiver em um servidor diferente, ele não será interno Redirecionando ou reformando e você teria que usar o Proxy reverso .

Enquanto o sinal [P] usado no seu exemplo faz com que a solicitação seja tratada por meio de uma solicitação de proxy por mod_proxy , não é recomendado:

Performance warning

Using this flag triggers the use of mod_proxy, without handling of persistent connections. This means the performance of your proxy will be better if you set it up with ProxyPass or ProxyPassMatch. This is because this flag triggers the use of the default worker, which does not handle connection pooling. Avoid using this flag and prefer those directives, whenever you can.

A ProxyPass Diretiva que Mapeia servidores remotos para o local O servidor URL-espaço só está disponível nos contextos configuração do servidor , host virtual e diretório , mas não disponível em .htaccess context .

Se você não tiver acesso à configuração do servidor, só poderá fazer isso com RewriteRule , como é permitido em .htaccess context. É exatamente como no exemplo da sua pergunta.

Se você puder acessar a configuração <VirtualHost> (ou solicitar uma modificação), você poderá adicioná-la:

<Location "/test/">
    ProxyPass "http://api.example.com/title/test/"
</Location>

Conteúdo no mesmo servidor

Se o conteúdo estiver fisicamente no mesmo servidor, mas em um% diferente <VirtualHost> , a maneira mais simples é não usar mod_rewrite ou mod_proxy , mas mod_alias . A diretiva Alias permite que os documentos sejam armazenados no sistema de arquivos local, exceto em DocumentRoot .

Alias "/test" "/path/to/api/title/test"

Se você precisar apenas remapear no caso de agentes de usuário especiais

Neste caso, com o aplicativo AngularJS, parece que você deseja apenas remapear o URL quando ele é visitado por rastreadores de mídia social. Nesse caso, você realmente precisa usar RewriteCond e, com os seguintes RewriteRule s, pode usar a condição da sua pergunta.

Primeiro, certifique-se de ter mod_rewrite instalado , caso contrário você não será capaz de usar RewriteCond e RewriteRule .

Se o conteúdo estiver no servidor externo e você não puder evitar o uso de [P] :

RewriteRule ^test/(.*)$ http://api.example.com/title/test/$1 [P]

Se você estiver no contexto .htaccess , não deverá corresponder ^test/(.*)$ , mas o diretório atual:

RewriteRule (.*) http://api.example.com/title/test/$1 [P]

Se o conteúdo estiver em caminho diferente no mesmo servidor , você poderá usar o caminho do sistema de arquivos para substituição, mas isso não pode ser feito em .htaccess :

Substitutions are only treated as a file-system path when the rule is configured in server (virtualhost) context and the first component of the path in the substitution exists in the file-system.

RewriteRule ^test/(.*)$ /path/to/api/title/test/$1

Eu não usei \d* do seu exemplo: o meta-caractere \d limita a correspondência apenas a dígitos.

    
por 14.04.2017 / 20:35