
По сути, я хочу иметь такой URL:
http://domain.tld/auth.php?state=somestate&token=somelongtoken
переписано/перенаправлено в это:
http://domain.tld/auth/validate/somestate/somelongtoken
Я уже довольно долго ищу информацию в сети, но не могу понять, как это сделать.
И еще — что будет лучшим решением — перенаправление или переписывание?
Я не собираюсь использовать URL-адрес ни для чего, кроме проверки пользователя через API, поэтому он просто перенаправляет пользователя после посещения этой страницы.
решение1
Есть непроверенный код...
# 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]
Я бы использовал переписывание, поскольку вы говорите, что /auth.php уже сделает Location:. На самом деле нет смысла отправлять два перенаправления. Плюс это плохая практика для поисковых систем (я знаю, что в этом случае этого не произойдет, просто упоминаю, потому что если это плохо для SEO, это, вероятно, не так хорошо для ваших пользователей.)
Обратите внимание, что регулярное выражение RewriteRule и предыдущие условия ожидают, что эти два параметра строки запроса будут именно в этом порядке. Вам понадобится несколько строк, чтобы не навязывать порядок. Но я думаю, что это не проблема.