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
orProxyPassMatch
. 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.