基本上,我想要这个 URL:
http://domain.tld/auth.php?state=somestate&token=somelongtoken
重写/重定向到此:
http://domain.tld/auth/validate/somestate/somelongtoken
我已经在网上查了很长时间了,但我不知道该怎么做。
另外 - 重定向或重写在这里是最好的吗?
除了通过 API 验证用户之外,我不会使用该 URL 进行任何其他操作,因此它只是在用户访问该页面后重定向用户。
答案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 和先前条件的正则表达式要求这两个查询字符串参数按该顺序排列。您需要多行才能不强制按该顺序排列。但我认为这不是问题。