2017-05-04 55 views
0

在我的Rails應用程序我生成一個URL,它的正確的模式如下:如何在rails應用程序中將特定的url模式發送到404?

https://example.com/equipment_details/slug

這是URL谷歌應該是索引。但由於使用javascript的分頁實現,在平臺上有另一個活動的URL,如下所示:

http://localhost:3000/equipment_details/slug?page=2

控制器方法是象下面這樣:

class EquipmentsController < ApplicationController 
    def equipment_details 
    @equipment = Equipment.friendly.active.includes(:country, :manufacturer, :category, :user).find(params[:id]) 
    if @equipment 
     @products = @equipment.category.equipments.active.where.not("equipment.id = ?", @equipment.id) 
     @countries = Country.active.all 
     @states = State.active.all 
     @cities = City.active.all 
     @services = Service.active.where("category_id = ? AND sub_category_id = ? AND country_id = ? AND state_id = ? AND city_id = ?", @equipment.category_id, @equipment.sub_category_id, @equipment.country_id, @equipment.state_id, @equipment.city_id) 
     respond_to do |format| 
     format.js 
     format.html 
     format.pdf do 
      render :pdf => "vendaxo_#{@equipment.title}", 
       :layout => 'equipment_details_pdf.html.erb', 
       :disposition => 'attachment' 
     end 
     end 
    else 
     flash[:error] = "Equipment not found." 
     redirect_to root_path 
    end 
    end 
end 

基本上在兩個鏈接的主要內容是,除了在頁腳的JavaScript分頁內容相同。這導致SEO優化的問題。我怎樣才能發送與第二種模式的網址,即與?page=2404頁?有沒有辦法從軌道路線文件做到這一點?

回答

1

如果您特別想查找名爲page的查詢參數,並引發異常以激活404響應(如果該請求不是來自JavaScript的AJAX調用),則可以在您的操作之前執行此操作EquipmentDetailsController(或其他所謂的)。

class EquipmentDetailsController < ApplicationController 
    before_action :send_to_404, only: [:name] # or whatever the action is called 

    def send_to_404 
    if !request.xhr? && !params[:page].nil? 
     raise ActionController::RoutingError.new('Not Found') 
    end 
    end 
end 
+0

請檢查我添加了控制器方法 – user3576036

+0

那'name'在URL實際上不是一個控制器方法名,但是從'friendly_id了'slug' ' – user3576036

0

你可以通過發送404時params[:page] == 2

render plain: "record was not found", status: :not_found 

但是,你不應該簡單地發出一個404,當你不希望谷歌對網頁進行索引(實際上確實存在) 。 Google evaluates javascript these days as well

考慮添加noindex header to the page和/或使用a canonical url reference

<meta name="robots" content="noindex"> 
<link rel="canonical" href="https://example.com/equipment_details/name"> 
相關問題