[RAILS] Vermeiden Sie den Zugriff auf den Pfad * am Ende von route.rb, wenn Sie auf die URL der Datei [ActiveStorage] zugreifen

Wenn sich am Ende von config / route.rb eine Route wie "* path" befindet, Es stimmt vor dem Endpunkt (/ rails / active_storage / ...) [^ 2] überein, der die ActiveStorage-Datei angibt.

[^ 2]: Klicken Sie hier für die Definition https://github.com/rails/rails/blob/v5.2.4.4/activestorage/config/routes.rb#L4

config/routes.rb


Rails.application.routes.draw do
  ...

  get "*path" , to: redirect('/')
end

Um dies zu vermeiden, gehen Sie wie folgt vor.

config/routes.rb


Rails.application.routes.draw do
  ...

  get '*path' , to: redirect('/'), constraints: lambda { |req|
    req.path.exclude? 'rails/active_storage'
  }
end

Auf diese Weise können Sie festlegen, dass die Pfade mit "Rails / Active_Storage" nicht übereinstimmen.

Informationen zur Option "Einschränkungen"

Interpretiert als Option zur Einschränkung des spezifischen Routings. Verwenden Sie wie folgt.

# match `/users/A12345`, but not `/users/893`
get 'users/:id', to: 'users#show', constraints: { id: /[A-Z]\d{5}/ }

# match port 3000 only
get :users, to: 'users#index', constraints: { port: '3000' }

Sie können Lambda auch wie oben beschrieben angeben. [^ 1]

get "hi", to: redirect("/foo"), constraints: ->(req) { true }

[^ 1]: Genau genommen sollten Sie ein Objekt angeben, das mit der Methode "call" aufgerufen werden kann, die "request" als Argument verwendet. Es scheint, dass das Zielrouting nur übereinstimmt, wenn der für jede Anforderung aufgerufene Aufruf true zurückgibt. Obwohl in diesem Beitrag nicht erwähnt, ist "Übereinstimmungen" auch akzeptabel. (Testcode, [Implementierung](https://github.com/ Schienen / Schienen / Blob / e44b3419d44b5fa6e66305fe703f34bb63932593 / actionpack / lib / action_dispatch / routing / mapper.rb # L41-L42)

Referenz

Recommended Posts

Vermeiden Sie den Zugriff auf den Pfad * am Ende von route.rb, wenn Sie auf die URL der Datei [ActiveStorage] zugreifen
Warum einen Zeilenumbruch am Ende der Datei einfügen?