.htaccess尾部斜杠规则导致Laravel邮箱验证失效如何添加例外?
解决方法
你只需要在现有的「非文件夹/非文件URL追加尾部斜杠」的重写规则组里,新增一条排除邮箱验证路径的条件即可,修改后的规则片段如下:
# Redirect To Trailing Slashes If Not A Folder Or A File... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(/$|\.) # 新增以下规则排除邮箱验证路径 RewriteCond %{REQUEST_URI} !^/email/verify RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
注意事项
- 修改配置后必须清空浏览器缓存,301重定向属于永久重定向,会被浏览器长期缓存,未清空缓存时旧规则仍然会生效。
- 如果后续有其他带签名的链接(比如密码重置、邀请链接等)出现相同失效问题,可以继续新增排除规则,例如要排除密码重置路径就添加一行:
RewriteCond %{REQUEST_URI} !^/password/reset - 如果你站点的路径带语言前缀(比如
/en/email/verify),可以把排除规则的路径匹配改成!/email/verify,去掉开头的^即可匹配所有包含该路径段的请求。
失效原因说明
Laravel的签名验证会把生成链接时的完整请求路径纳入校验逻辑,重写规则给路径追加了尾部斜杠后,实际请求路径和生成签名时的路径不一致,自然会触发验证失败。
内容的提问来源于stack exchange,提问作者casusbelli
相关产品推荐
相关产品推荐

