Redirecionamento Apache com base na correspondência de diretório e Adicionar outra carta ao URL de destino

2

Então, aqui está o que estou tentando realizar. Eu tenho esse link, quero redirecionar 301:

URL de origem:

https://www.example.com/folder1/page.aspx?fh_location=%2f%2fpackages%2fnl_BE%2fpr_earlybookable%3E%7b0%7d%2fpk_active%3d1%2fpk_siteswitch%3E%7bnvb%7d%2fpk_country%3E%7biso_pt%7d%2fpk_city%3E%7bgeo_9833%7d%2fpr_duration%3E%7b0608%7d%2fpk_hotelonly%3d0&fh_sort_by=pr_defaultprice&fh_secondid=nbs_city_cli16a_s18&fh_view=detail&fh_eds=%C3%9F&RoomOccupation1=CLI16A_2a_LO_2_0

Condição 1: tenho uma lista de diretórios como folder1 , folder2 , folder3 , folder4 . Desejo redirecionar apenas se o URL contiver alguma das pastas listadas acima, mas não para folder5 ou qualquer outra pasta não listada acima no URL.

Condição 2: Agora vem a parte complicada; no destino, o ID cli16a do URL fh_secondid=nbs_city_cli16a_s18 deve ser anexado ao URL de destino, conforme mostrado abaixo

Condição 3: Agora, a parte mais complicada. Adicione esse Y ao URL de destino, que representa a pasta no URL de origem, por exemplo, folder1 = Y , folder2 = O , folder3 = B , folder4 = C .

Até agora eu vim com o abaixo.

RewriteMap WE NEED TO GET A MAPPING OF TYPE OF HOTEL (not sure what to put here)
RewriteCond %{REQUEST_URI}  ==(folder1|folder2|folder3|folder4) [NC]
RewriteCond ${conv-lc:%{QUERY_STRING}} (fh_secondid)=[^_]+_[^_]+_([^_]+)_
RewriteRule ^/nl/_USE RewriteMap Matching text here/ ( not sure what to put here)
    
por Ja Hi 10.08.2018 / 15:04

1 resposta

0

Pelo que parece, você não precisa precisar de RewriteMap , desde que o número de diretórios seja limitado, o que parece ser, e o ID não seja sensível a maiúsculas e minúsculas. o URL de destino, o que você diz não é (nos comentários).

Para o sufixo ("Y", "O", "B" ou "C"), podemos criar uma variável de ambiente, baseada no diretório que está sendo solicitado:

RewriteEngine On

# Assign value to ID_SUFFIX based on the directory being accessed
RewriteRule ^/?folder1 - [E=ID_SUFFIX:Y]
RewriteRule ^/?folder2 - [E=ID_SUFFIX:O]
RewriteRule ^/?folder3 - [E=ID_SUFFIX:B]
RewriteRule ^/?folder4 - [E=ID_SUFFIX:C]

Em seguida, processe a solicitação apenas se a variável ID_SUFFIX env tiver sido definida, capturando a ID requerida da string de consulta:

# Capture ID and redirect
RewriteCond %{ENV:ID_SUFFIX} .
REwriteCond %{QUERY_STRING} fh_secondid=[^_]+_[^_]+_([^_]+)
RewriteRule ^ /be/_%1%{ENV:ID_SUFFIX}/ [R=302,L]

A expressão %{ENV:ID_SUFFIX} naturalmente refere-se ao env var definido anteriormente (se em tudo). Inicialmente, nós simplesmente verificamos se isso está configurado (isto é, contém algo ) - ele só é configurado se um dos diretórios nomeados for requisitado.

%1 é uma referência anterior ao primeiro grupo capturado no último CondPattern correspondente. ie. Isso contém o ID (por exemplo, cli16a em seu exemplo).

Isso constrói uma substituição do formulário /be/_cli16aY/ e emite um redirecionamento externo.

Observe que este é atualmente um redirecionamento 302 (temporário). Apenas mude para 301 (permanente) quando tiver certeza de que está funcionando bem, para evitar problemas de cache potencial.

    
por 14.08.2018 / 02:28