我正在开发一个Ruby on Rails应用程序,我的路由可以正确地处理类似http://localhost:3000/CA
的内容,以访问有关加利福尼亚的某些页面。它处理小写“ca”但有一种方式,如果我的用户手动键入小写“ca”,URL / Routes将显示大写“CA”?
答案 0 :(得分:1)
如果用户请求http://localhost:3000/ca
,则应重定向到(301重定向)http://localhost:3000/CA
,
您可以在控制器中处理
def controller_name
if(params[:id].to_s != params[:id].to_s.upcase)
redirect_to urlname_url(:params[:url].to_s.upcase), :status => :moved_permanently
end
# rest of the code
end
拥有唯一的网址是很好的,因为重复的网址会对搜索引擎优化产生负面影响。
答案 1 :(得分:0)
您可以使用路线匹配重定向到所需路线的大写版本。
我不知道你的路线文件是什么样的,所以我将为你提供一些我想出的东西的简化版本,你可以用它来构建你需要的东西。
假设我有一个states
控制器,它对每个州的缩写都有一个动作。我可以这样声明我的路线(对于get
动作StatesController #ca(加利福尼亚州)):
get '/CA', to: 'states#ca'
这只会匹配大写的CA,因此如果用户输入http://localhost:3000/ca
,他们就会收到错误。要解决此问题,我可以将'/ ca'与'/ CA'匹配:
get '/ca', to: redirect('/CA')
这非常简化。您不太可能希望在路径文件中明确描述每个州的缩写。
同样,我不知道你在路由文件中使用了什么,所以我只能告诉你(而不是向你展示一个例子)你可以提供一个块来处理这个逻辑。
使用一个块你也可以创建逻辑来处理人们不一致地缩写缩写的情况(比如将cA
或Ca
转换为CA
)。
这里有一些有用/相关的文档:http://guides.rubyonrails.org/routing.html#redirection。