Reescrita/redirecionamento de URL com dois parâmetros

Reescrita/redirecionamento de URL com dois parâmetros

Basicamente, quero ter este URL:

http://domain.tld/auth.php?state=somestate&token=somelongtoken

reescrito/redirecionado para isto:

http://domain.tld/auth/validate/somestate/somelongtoken

Já faz algum tempo que estou pesquisando na net, mas não consigo descobrir como fazer isso.

Além disso - um redirecionamento ou uma reescrita seria o melhor aqui?

Não vou usar o URL para outra coisa senão validar um usuário a partir de uma API, portanto, é apenas redirecionar o usuário após visitar aquela página.

Responder1

Existe algum código não testado ...

# Make sure you are accessing auth.php
RewriteCond %{REQUEST_URI} ^/auth.php$
# Check that state and token are present (in that order...)
RewriteCond %{QUERY_STRING} state=[^&]*token=
# Rewrite the URI
RewriteRule ^/auth.php\?state=\([^&]*\)\&token=\([^&]*\)$ auth/validate/\1/\2 [L,QSA]

Eu usaria uma reescrita, já que você está dizendo que /auth.php já fará um Location:. Realmente não faz sentido enviar dois redirecionamentos. Além disso, isso é uma má prática com mecanismos de pesquisa (sei que neste caso isso não acontecerá, apenas mencionando, porque se for ruim para o SEO, provavelmente não será tão bom para seus usuários).

Observe que o regex de RewriteRule e as condições anteriores esperam que esses dois parâmetros de string de consulta estejam nessa mesma ordem. Você precisaria de várias linhas para não forçar o pedido. Mas imagino que não seja um problema.

informação relacionada