Apache 2 redireciona e reescreve com base no dispositivo usado
Nesta página
- 1 Nota Preliminar
- 2 Habilitando mod_rewrite
- 3 Configurando o Apache para permitir regras de regravação em arquivos .htaccess
- 4 Criação de regras de reescrita
- 5 links
Desde o aumento maciço de smartphones e tablets como o iPhone, iPad, telefones e tablets Android, BlackBerries, etc., você pode ter considerado a criação de uma versão móvel do seu site. Este tutorial explica como configurar o Apache para servir a versão móvel do seu site se o visitante usar um dispositivo móvel e a versão regular se o visitante usar um PC desktop padrão. Isso pode ser alcançado com o módulo de reescrita do Apache.
1 Nota Preliminar
Neste tutorial, meu site \normal\ pode ser acessado em http://www.example.com e http://example.com, enquanto meu site móvel é chamado http://m.example.com. Esses vhosts já existem no meu sistema, então não vou abordar como configurá-los.
2 Habilitando mod_rewrite
Primeiro, você deve garantir que o módulo mod_rewrite do Apache esteja ativado. Este módulo permite que você faça um redirecionamento httpd, redirecionamento apache e URL de reescrita apache por meio de um servidor web apache. No Debian/Ubuntu, você pode ativá-lo assim:
a2enmod rewrite
Reinicie o Apache depois - para Debian/Ubuntu, o comando é:
/etc/init.d/apache2 restart
3 Configurando o Apache para permitir regras de regravação em arquivos .htaccess
Meu site \normal\ www.example.com/example.com tem o arquivo de configuração vhost /etc/apache2/sites-available/www.example.com.vhost e o documento root /var/www/www.example .com/web.
Meu site móvel m.example.com tem o arquivo de configuração vhost /etc/apache2/sites-available/m.example.com.vhost e a raiz do documento /var/www/www.example.com/mobile.
Eu quero colocar as regras de reescrita para cada site em um arquivo .htaccess (embora também seja possível colocá-las diretamente no arquivo de configuração do vhost) com get read by apache http server. Portanto, primeiro devo modificar nossas configurações de vhost para que ambos os arquivos .htaccess possam conter diretivas de reescrita. Podemos fazer isso com a linha AllowOverride All (que permite ao .htaccess substituir todas as configurações na configuração do vhost, a configuração do servidor):
vi /etc/apache2/sites-available/www.example.com.vhost
[...]
<Directory /var/www/www.example.com/web/>
AllowOverride All
</Directory>
[...]
vi /etc/apache2/sites-available/m.example.com.vhost
[...]
<Directory /var/www/www.example.com/mobile/>
AllowOverride All
</Directory>
[...]
Reinicie o Apache depois:
/etc/init.d/apache2 restart
4 Criando Regras de Reescrita
Agora vamos criar as regras de reescrita para o site \normal\ www.example.com/example.com que redirecionará todos os usuários de dispositivos móveis para a versão móvel m.example.com - eu me concentro nos dispositivos/agentes de usuário relevantes aqui, que são Android, Blackberry, Googlebot-mobile (bot de pesquisa móvel do Google), IE Mobile, iPad, iPhone, iPod, Opera Mobile, PalmOS e WebOS.
O arquivo /var/www/www.example.com/web/.htaccess tem a seguinte aparência:
vi /var/www/www.example.com/web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^$ http://m.example.com/ [L,R=302]
</IfModule>
Para nosso site móvel m.example.com, as regras de reescrita que redirecionam todos os usuários que não usam um dispositivo móvel para nosso site \normal\ www.example.com/example.com são as seguintes - Eu neguei o RewriteCond condição do arquivo .htaccess anterior:
vi /var/www/www.example.com/mobile/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^$ http://www.example.com/ [L,R=302]
</IfModule>
É isso, configuramos nossa diretiva de redirecionamento! Agora você pode fazer alguns testes, por ex. visite m.example.com com um navegador de desktop padrão:
Se tudo correr bem, você deve ser redirecionado para www.example.com:
Agora teste com um dispositivo móvel (eu uso um telefone Android aqui) e acesse www.example.com:
Você deve ser redirecionado para m.example.com:
5 links
- Apache: http://httpd.apache.org/
- Mod_rewrite do módulo Apache: http://httpd.apache.org/docs/current/mod/mod_rewrite.html