【发布时间】:2021-05-25 08:50:13
【问题描述】:
我有一个注册和激活码,我正在更新一点,用户注册后它会向他们发送一封电子邮件以激活。
通过电子邮件发送链接
/user/activate/$hashed_confirm_code
生成
http://example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c
我去了http://www.visiospark.com/mod-rewrite-rule-generator/并做了一个mod重写,相应地更改了电子邮件链接。
重写开启
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
RewriteCond %{QUERY_STRING} (^|&)hash_token=($|&)
RewriteRule ^user/activate$ /user/activate/?&%{QUERY_STRING}
如果我点击链接,它会在浏览器中生成以下内容
http://example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c
然而它只是给出一个 500 错误,我的激活码功能的基础是
function activate_user(){
if (($_SERVER['REQUEST_METHOD'] === "GET") && isset($_SERVER['QUERY_STRING'])) {
$confirm_code = $_SERVER['QUERY_STRING'];
//do stuff
}
}
现在如果我在浏览器中更改链接
example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c93c
到这里
example.com/user/activate?0dbc0aef3d4d9d3e67ee4bf6c
它有效,所以如果我删除正斜杠并添加问号它有效
【问题讨论】:
标签: php mod-rewrite