我有以下路线:
get "/@:user_name", UserController, :show
哪个似乎有效。但是,当我使用URL帮助程序时:
user_path( @conn, :show, @current_user.user_name )
输出完全转义:
如果我实现这样的路线:
get "/@/:user_name", UserController, :show
然后@符号被解除输出:
有没有办法在不转义@符号的情况下实现第一条路线?在URL路径中使用@符号是个坏主意吗?
答案 0 :(得分:2)
原因是凤凰助手expands segments and then encodes params。 http://url.com/@user
中的最后一段被认为是一个参数,而http://url.com/@/user
则不是。
可能有不同的意见,无论是否正确,但事实是你的参数(在这种特殊情况下的用户名)通常来自外部世界,而路线本身来自你的代码。这就是http://url.com/@/user
不是URI.encode
d。
我不会反对凤凰处理它的方式,而只是跟http://url.com/@/user
一样。
OTOH,https://url.com/%40user
和https://url.com/@user
从您的浏览器的角度来看是完全相同的,并且指向同一目的地。
希望它有所帮助。