2
我正在將我的應用中的/widgets
路由重命名爲/thingers
,我希望能夠用一行將所有widget
相關URL重定向到它們的thinger
對應項。重定向通配符匹配
喜歡的東西:
get '/widgets(*anything)', to: redirect('/thinger%{anything}'),
as: 'widgets_redirect'
^^^這並不工作:它通過斜線通過爲%2F30%2F
,並沒有通過文件擴展名的。
唯一的工作解決我是在幾行:
get '/widgets', to: redirect('/thingers'), as 'widgets_redirect'
get '/widgets/:id', to: redirect('/thingers/%{id}')
get '/widgets/:id/:action.:ext', to: redirect('/thingers/%{id}/%{action}.%{ext}')
get '/widgets/:id/:action', to: redirect('/thingers/%{id}/%{action}')
*編輯:交換了最後兩行,否則一個沒有文件擴展名的比賽,並錯誤地處理與延期請求。
如何用單一行覆蓋所有這些情況?
爲什麼不''/.*/包括斜槓也? – tuff
它的確如此。你現在寫的所有鏈接,例如'/ widget/something/another.txt'都會被重定向到'/ thingers/something/another.txt' –
不幸的是它沒有:斜線仍然是URL編碼的,而不是通過,所以'/ widgets/info.json'我被重定向到'/ thingers30%2Finfo.json'。我也想知道爲什麼你的解決方案需要兩行,如果斜線可以匹配 - 爲什麼不只是'重定向('/ thingers%{thingy}')'? – tuff