Semplice problema, ma non riesco a trovare una risposta facendo qualche ricerca su Google. Qual è il modo Rails di fare questo 301 diretto (http://x.com/abc>http://www.x.com/abc). Un before_filter?Reindirizza le richieste non www agli URL URL in Rails
risposta
Idealmente lo si farebbe nella configurazione del server Web (Apache, nginx ecc.) In modo che la richiesta non tocchi nemmeno Rails.
Aggiungere il seguente before_filter
al ApplicationController
:
class ApplicationController < ActionController::Base
before_filter :add_www_subdomain
private
def add_www_subdomain
unless /^www/.match(request.host)
redirect_to("#{request.protocol}x.com#{request.request_uri}",
:status => 301)
end
end
end
Se avete voglia di fare il redirect usando Apache, è possibile utilizzare questo:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.x\.com [NC]
RewriteRule ^(.*)$ http://www.x.com/$1 [R=301,L]
Ottima risposta Giovanni. Se stai usando Rails> = 2.3, suggerirei di usare un Metal invece. :) –
Grazie! Sì, buon punto sul Metal. –
Prego! –
Mentre la risposta di Giovanni è perfettamente bene, se stai usando Rails> = 2.3 Suggerirei di creare un nuovo Metal. Rails Metals sono più efficienti e offrono prestazioni migliori.
$ ruby script/generate metal NotWwwToWww
Quindi aprire il file e incollare il seguente codice.
# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)
class NotWwwToWww
def self.call(env)
if env["HTTP_HOST"] != 'www.example.org'
[301, {"Content-Type" => "text/html", "Location" => "www.#{env["HTTP_HOST"]}"}, ["Redirecting..."]]
else
[404, {"Content-Type" => "text/html"}, ["Not Found"]]
end
end
end
Naturalmente, è possibile personalizzare ulteriormente il Metallo.
Se si desidera utilizzare Apache, here's a few configurations.
Simone, qualche consiglio su come usarlo con Rails 3? Mi piacerebbe reindirizzare 'www.foo.com' a' foo.com'. –
Con Rails 3 è ancora più semplice: usa il metodo di reindirizzamento 'reindirizzamento'. Non c'è bisogno di usare un metallo. –
Ho trovato questo articolo quando si cerca di ottenere il contrario (www per il reindirizzamento del dominio root). Così ho scritto il pezzo di codice che redirects all pages from www to the root domain.
v'è una migliore Rails 3 vie - mettere questo nel tuo routes.rb
del file:
constraints(:host => "example.com") do
# Won't match root path without brackets around "*x". (using Rails 3.0.3)
match "(*x)" => redirect { |params, request|
URI.parse(request.url).tap { |x| x.host = "www.example.com" }.to_s
}
end
Aggiornamento
Ecco come farlo dominio agnostico:
constraints(subdomain: '') do
match "(*x)" => redirect do |params, request|
URI.parse(request.url).tap { |x| x.host = "www.#{x.host}" }.to_s
end
end
Il collegamento è interrotto. – iamnotmaynard
Per rails 4, usalo -
before_filter :add_www_subdomain
private
def add_www_subdomain
unless /^www/.match(request.host)
redirect_to("#{request.protocol}www.#{request.host_with_port}",status: 301)
end
end
È possibile provare il codice qui sotto -
location/{
if ($http_host ~* "^example.com"){
rewrite ^(.*)$ http://www.example.com$1 redirect;
}
}
- 1. Libreria Python richieste reindirizza nuovo URL
- 2. Aggiungendo www agli URL del sito web durante la convalida
- 3. Come reindirizzare gli URL non www a www utilizzando htaccess?
- 4. .htaccess Reindirizza URL con caratteri UTF 8
- 5. Come reindirizzare con URL "www" a senza URL "www" o viceversa?
- 6. Reindirizza tutti gli URL http E https non www a https://www.xyz.com via htaccess
- 7. Haproxy reindirizza www a non www
- 8. reindirizza 404 a URL simili
- 9. URL relativi in richieste AJAX
- 10. Hai problemi con le richieste di URL
- 11. "URL con WWW e URL senza WWW": c'è qualche differenza tra loro?
- 12. OkHttp non reindirizza le richieste POST quando utilizzato con retrofit
- 13. Rails reindirizza con https
- 14. Come reindirizzare dinamicamente gli URL www-based a URL non www con più domini nella stessa VirtualHost
- 15. Riscritto URL IIS7 - Aggiungi prefisso "www"
- 16. Reindirizza le richieste solo se il file non viene trovato?
- 17. .htaccess reindirizza www a non-www con SSL/HTTPS
- 18. sostituire gli URL nel testo con collegamenti agli URL
- 19. .htaccess Reindirizza sottodominio a URL esterno
- 20. Url GraillMapping Reindirizza per mantenere DRY
- 21. .htaccess reindirizza cartella a un url
- 22. rails form_tag percorso url
- 23. ottenere l'URL, un dato url reindirizza a
- 24. Url di installazione per Google Apps Marketplace (GAMv2) non reindirizza
- 25. Come accedere agli URL OData con autenticazione
- 26. gli URL prefisso applicazione Rails
- 27. come ottenere URL di reindirizzamento utilizzando le richieste di pitone
- 28. Più richieste Ajax per lo stesso URL
- 29. richieste di url asincroni all'interno di dispatch_async
- 30. Routing in Rails. Dots in URL
perché vuoi www lì? cosa ti dà? Checkout http://no-www.org/index.php –
@James - Un uso comune di www. è così che non è necessario un secondo dominio "senza cucina" per servire il contenuto statico. – MiffTheFox