
Grundsätzlich möchte ich diese URL haben:
http://domain.tld/auth.php?state=somestate&token=somelongtoken
wie folgt umgeschrieben/umgeleitet:
http://domain.tld/auth/validate/somestate/somelongtoken
Ich habe jetzt schon eine ganze Weile im Internet gesucht, aber ich kann nicht herausfinden, wie das geht.
Also – wäre hier eine Weiterleitung oder ein Neuschreiben das Beste?
Ich werde die URL für nichts anderes verwenden als für die Validierung eines Benutzers über eine API. Der Benutzer wird also nach dem Besuch dieser Seite lediglich umgeleitet.
Antwort1
Es gibt ungetesteten Code ...
# 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]
Ich würde eine Umschreibung verwenden, da Sie sagen, dass /auth.php bereits ein Location: ausführt. Es hat wirklich keinen Sinn, zwei Weiterleitungen zu senden. Außerdem ist das eine schlechte Praxis bei Suchmaschinen (ich weiß, dass es in diesem Fall nicht passieren wird, ich erwähne es nur, denn wenn es schlecht für SEO ist, ist es wahrscheinlich nicht so schön für Ihre Benutzer.)
Beachten Sie, dass der reguläre Ausdruck der RewriteRule und der vorherigen Bedingungen erwartet, dass diese beiden Abfragezeichenfolgenparameter genau in dieser Reihenfolge vorliegen. Sie benötigen mehrere Zeilen, um die Reihenfolge nicht zu erzwingen. Aber ich könnte mir vorstellen, dass das kein Problem ist.