Mascarando a URL em um mod_rewrite

5

Existe alguma maneira de fazer um mod_rewrite de um domínio para outro, mas mantendo o URL do navegador o mesmo por toda parte? Isso é o que eu quero:

O usuário insere algo como bacon.com e acaba em example.com/bacon , mas a URL do navegador sempre fica como bacon.com?

Eu basicamente quero fazer um mod_rewrite enquanto mascarando o URL. Desculpem os domínios de exemplo sem imaginação, mas ainda são apenas 10 da manhã ... Eu verifiquei muitas outras respostas, mas elas sempre envolvem mod_rewrites no domínio mesmo . Eles não lidam com o fato de que o bacon.com já é um ServerAlias de example.com.

    
por hohner 10.05.2013 / 11:10

1 resposta

9

Eu posso lhe dar três maneiras de fazer isso.

1 Usando hosts virtuais

Dado que bacon.com é um ServerAlias para example.com, ou seja, ambos estão no mesmo servidor, você pode fazer isso sem usar mod_rewrite. Pense desta maneira: mod_rewrite é a maneira mais básica de mapear URLs para um sistema de arquivos. Então, o que eu faria seria simplesmente configurar um VirtualHost separado que usasse o diretório correto como base.

Aqui está um breve exemplo:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /www/files

  [... all other config you have for example.com]
</VirtualHost>

<VirtualHost *:80>
  ServerName bacon.com
  DocumentRoot /www/files/bacon

  # To have CSS directly under /www/files/css instead of /www/files/bacon/css
  Alias /css /www/files/css

  [... all other config you have for bacon.com]
</VirtualHost>

Como você vê, isso não é uma reescrita; em vez disso, você está configurando o bacon.com para usar o diretório base de example.com/bacon como seu próprio DocumentRoot.

2 Usando mod_rewrite como proxy

Se você quiser usar o mod_rewrite, você pode usar o flag P que fará o mod_rewrite funcionar como um proxy. Aqui está um exemplo:

RewriteRule /(.*) http://example.com/bacon/$1 [P]

Editar em resposta ao comentário:

Como você deseja que o link seja link em vez de link , crie uma regra separada que seja a primeira e capture o URL específico:

RewriteRule /css/(.*) http://example.com/css/$1 [P]
RewriteRule /(.*) http://example.com/bacon/$1 [P]

Para fazer isso, você precisa ter o mod_proxy carregado e ativado. Entretanto, observe que isso reduzirá o desempenho em comparação ao uso do mod_proxy diretamente, pois ele não manipula conexões persistentes ou o conjunto de conexões. Então, se você não pode fazer o que quiser com o VirtualHosts, sugiro o terceiro método:

3 Usando mod_proxy diretamente

<VirtualHost *:80>
  ServerName bacon.com

  ProxyPass http://example.com/bacon
  ProxyPassReverse  http://example.com/bacon
</VirtualHost>

Para mais informações, consulte a documentação do mod_proxy

    
por 10.05.2013 / 11:31