Regra de reescrita para URL para dispositivos móveis

3

Eu tenho que redirecionar os usuários de dispositivos móveis para um novo URL ( /amp/... ), então adicionei este código de fragmento à minha configuração de site do Apache:

RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
RewriteCond %{REQUEST_URI} !^/amp/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /amp/$1 [L,R=302]'

O problema é que só sou redirecionado quando solicito a página inicial ( test.domain.com ) e não quando solicito outro URL (por exemplo, test.domain.com/category/web ). Alguma ideia do que estou fazendo errado?

Este é um site Wordpress, e o módulo completo de reescrita é:

<Directory /var/www/project>
    DirectoryIndex index.php
    Options None FollowSymLinks
    AllowOverride none
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteRule ^uploads/(.+) http://myCDN.com/uploads/$1  [R,L]
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
        RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
        RewriteCond %{REQUEST_URI} !^/amp/.*$
        RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
        RewriteRule ^(.*)$ /amp/$1 [L,R=302]
    </IfModule>
</Directory>
    
por Manolo 04.04.2017 / 19:28

1 resposta

1

Seu redirecionamento precisa ser antes do front controller (reescrita interna). O front controller está capturando todas as solicitações, exceto a raiz do documento (home page). Assim, seu redirecionamento está sendo processado apenas para a página inicial e está sendo ignorado apenas para todas as outras solicitações.

Em outras palavras:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
RewriteCond %{REQUEST_URI} !^/amp/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /amp/$1 [L,R=302]

RewriteRule ^uploads/(.+) http://myCDN.com/uploads/$1  [R,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Como regra geral, os redirecionamentos externos devem sempre ir antes das reescritas internas.

Você mencionou que isso está em sua "configuração do site Apache". Eu suponho que essas diretivas estão em um contêiner <Directory> dentro de sua "configuração do site" (ou seja, em um contexto de diretório ). (Essas diretivas simplesmente não funcionariam em um contexto configuração do servidor ou host virtual , ou seja, diretamente em sua "configuração do site".)

    
por 04.04.2017 / 21:05