Caso 3: Adicionar parâmetros de consulta ao URL
Digamos que existe um site chamado example.com que mostra um layout móvel por padrão, mas você prefere o layout de desktop. Felizmente, o site suporta um parâmetro de consulta layout para especificar qual layout o site exibe. Vamos criar uma regra que adiciona layout=desktop automaticamente.
Talvez você pense que poderia defini-lo da seguinte forma:
- Redirecionar De:
https://example.com/.*(Expressão Regular) - Redirecionar Para:
$0?layout=desktop
$0 referencia o URL de destino. Se você tentar aceder a example.com/hello, será redirecionado para example.com/hello?layout=desktop. Esta funcionalidade é chamada de substituição.
A substituição também está disponível para o modo Curinga, uma vez que é internamente convertida para Expressão Regular.
No entanto, existem alguns problemas com estas configurações.
Problema 1: Loop infinito
A configuração atual cria um loop de redirecionamento infinito, uma vez que https://example.com/.* também visa https://example.com/hello?layout=desktop.
Neste caso, pode especificar um padrão de URL excluído que permite o acesso sem redirecionamento, como este com Expressão Regular:
.*[&?]layout=[^&]*.*
.*: Corresponde a qualquer coisa[&?]: Corresponde a&ou?[^&]*: Corresponde a qualquer coisa, exceto&
Problema 2: Não consegue lidar com parâmetros existentes corretamente
Se o URL de destino já tiver outros parâmetros de consulta como example.com/hello?theme=dark, o destino será example.com/hello?theme=dark?layout=desktop (Existem dois ? no URL), mas você só pode juntar os parâmetros com &. ? como um caractere especial só é permitido no início dos parâmetros. Portanto, não é tratado como um parâmetro válido.
Neste caso, altere as configurações assim:
- Redirecionar De:
(https://example.com/[^?]*)(\(.*))? - Redirecionar Para:
$1?layout=desktop&$3
Vamos analisar passo a passo.
(https://example.com/[^?]*): Corresponde à parte até o caractere anterior de?.[^?]*corresponde a qualquer coisa, exceto?.- Isto é envolvido com
()para que possa referenciá-lo com$1mais tarde.
(\(.*))?: Corresponde a uma string que começa com?, o que significa parâmetros de consulta.- Isto também corresponde a uma string vazia pelo quantificador
?no final do padrão, que corresponde zero ou uma vez. - O
()externo e o()interno podem ser referenciados com$2e$3mais tarde.
- Isto também corresponde a uma string vazia pelo quantificador
RegExr pode ajudá-lo a entender os detalhes.
O RegExr mostra um erro quando você não escapa / com \. Embora possa escapá-lo, não é obrigatório, pois o Redirect Web usa um motor diferente da Apple que não exige o escape.
Esta não é uma solução perfeita, pois redireciona example.com/hello para example.com/hello?layout=desktop&, que inclui um & desnecessário no final do URL. Não é um grande problema em geral, mas se desejar removê-lo, pode usar o Processamento de Grupo de Captura.
Em conclusão, esta é a saída final:
- Redirecionar De:
(https://example.com/[^?]*)((\(.*))?)(Expressão Regular) - Redirecionar Para:
$1?layout=desktop$3 - Padrão de URL Excluído:
.*[&?]layout=[^&]*.*(Expressão Regular) - Processamento de Grupo de Captura:
- Grupo:
$3 - Processo: Substituir Ocorrências
- Alvo:
\?(.*) - Substituição:
&$1
- Alvo:
- Grupo:
Isto é meramente um exemplo. Também pode criar várias regras para lidar com cada problema. Pode ser muito mais simples.