Proxy reverso usando token de URL

1

Eu tenho uma instalação YOURLS em funcionamento que vive em https://example.com , tem uma mão cheia de gatilhos que podem ser passados na URL.

https://example.com/this atua como um redirecionamento, mas se você prefixar this com + , para obtermos https://example.com/+this , obteremos uma função personalizada. Da mesma forma, se adicionarmos o + ao final do URL, como https://example.com/this+ , poderemos exibir algumas estatísticas, etc.

Como eu procuraria essas funções por meio de subdomínios para que quando https://a.example.com/this fosse solicitado, o usuário recebesse os mesmos dados de https://example.com/+this , mas no novo url, e quando https://b.example.com/this fosse solicitado, o usuário vê o mesmo resultado de https://example.com/this+ ?

this usa um conjunto de caracteres de [a-zA-Z0-9]

Eu não consigo chegar a lugar algum com isso. Eu sei que mod_rewrite pode ajudar aqui, que mod_proxy será necessário e pode corresponder a regex, e que SSLPRoxyEngine on precisa ser definido, qual é a melhor abordagem?

    
por Joshp.23 05.12.2016 / 23:48

1 resposta

1

Tente o seguinte usando mod_rewrite / mod_proxy:

RewriteEngine On

# Request https://example.com/+this
RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC]
RewriteRule ^/?\+([a-zA-Z0-9]+)$ https://a.%1/$1 [P]

# Request https://example.com/this+
RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)\+$ https://b.%1/$1 [P]

Isso pressupõe que this consista apenas nos caracteres a-z , A-Z e 0-9 (atualizados em relação aos comentários). Como alternativa, você pode usar o sinalizador NC ( NOCASE - case insensitive) no RewriteRule e especificar um padrão de apenas [a-z0-9] . Ou, se você estiver preparado para permitir também um sublinhado, poderá usar a classe de caractere abreviada \w (igual aos caracteres [A-Za-z0-9_] - "word"). Por exemplo:

RewriteRule ^/?(\w+)\+$ https://b.%1/$1 [P]

ATUALIZAÇÃO: Depois de reler sua pergunta atualizada , acho que tive a lógica invertida! (Embora o primeiro tenha funcionado?) Tente o seguinte:

# https://a.example.com/this TO https://example.com/+this
RewriteCond %{HTTP_HOST} ^a\.(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/+$1 [P]

# https://b.example.com/this TO https://example.com/this+
RewriteCond %{HTTP_HOST} ^b\.(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/$1+ [P]

Se essas diretivas estiverem em .htaccess , então o padrão RewriteRule pode ser simplificado um pouco ... o prefixo /? pode ser omitido. Então, ^/?([a-zA-Z0-9]+)$ se torna ^([a-zA-Z0-9]+)$ .

Observe que essas diretivas precisarão chegar perto do topo do arquivo .htaccess , antes do "front controller", caso contrário elas não serão processadas.

E quando estiver fazendo proxy para HTTPS (protocolo SSL), você precisará certificar-se de que SSLProxyEngine On esteja definido na configuração do seu servidor.

    
por 06.12.2016 / 02:06