【发布时间】:2023-03-30 10:58:01
【问题描述】:
我正在想办法在 Puma 收到我的请求 URL 之前修改它。
示例:
用户使用 /locale/resource/:id 之类的网址访问网站。 但我希望他重定向到/locale/'resource/resource-slug,因为它更漂亮。
我已经做了第一个版本。
before_action :redirect_with_pretty_challenge_url, only: %w(index show new edit)
private
def redirect_with_pretty_challenge_url
param_kind = challenge_show_or_admin_challenges? ? :id : :challenge_id
return unless params_is_id?(param_kind)
redirect_to stubbed_request_path_parameters(param_kind)
end
def params_is_id?(param_kind)
return true if params[param_kind].is_a?(Integer)
params[param_kind].to_i.to_s == params[param_kind]
end
def stubbed_request_path_parameters(param_kind)
request.path_parameters[param_kind] = Challenge.find_by_params(params[param_kind])&.slug
request.path_parameters
end
因此,用户会被重定向到“正确”的 url,但需要重定向...
我想知道是否有一种方法可以直接在请求中修改 url,这样我就不必重定向到用户,它会使这种操作方式更加“透明”。
有可能吗?还是由于 HTTP 协议而完全不可能?
【问题讨论】:
-
您可以更改 request URI in nginx 或 apache,但它不会更新浏览器地址栏 - 正是 Rack/Rails 将其视为请求 uri。恕我直言,只要学会接受它,您的用户很可能永远不会关心 URL。
-
也许用户不在乎。但是我愿意。我想控制显示的内容。甚至是网址。我想我会坚持使用旧的重定向。
标签: ruby-on-rails ruby-on-rails-4 httprequest puma