remove trailing slash and redirect (SEO)
This commit is contained in:
parent
a5cd2290ea
commit
40530de8bb
@ -47,5 +47,6 @@ module Locomotive
|
|||||||
config.filter_parameters << :password
|
config.filter_parameters << :password
|
||||||
|
|
||||||
config.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::Fonts', :path => %r{^/fonts}
|
config.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::Fonts', :path => %r{^/fonts}
|
||||||
|
config.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::SeoTrailingSlash'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -33,7 +33,7 @@ unless Locomotive.engine?
|
|||||||
begin
|
begin
|
||||||
require 'rack/cache'
|
require 'rack/cache'
|
||||||
Rails.application.middleware.insert_before 'Dragonfly::Middleware', 'Rack::Cache', {
|
Rails.application.middleware.insert_before 'Dragonfly::Middleware', 'Rack::Cache', {
|
||||||
:verbose => true,
|
:verbose => false,
|
||||||
:metastore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/meta"), # URI encoded in case of spaces
|
:metastore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/meta"), # URI encoded in case of spaces
|
||||||
:entitystore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/body")
|
:entitystore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/body")
|
||||||
}
|
}
|
||||||
|
4
doc/TODO
4
doc/TODO
@ -21,7 +21,9 @@ x contents permalink (UI)
|
|||||||
x BUG: has_one / has_many. Delete an author
|
x BUG: has_one / has_many. Delete an author
|
||||||
x bushido changes in the master
|
x bushido changes in the master
|
||||||
? edit sidebar (inline editor). Unable to reset it
|
? edit sidebar (inline editor). Unable to reset it
|
||||||
- SEO: support and support/ should be 2 different pages. Remove trailing slash
|
x SEO: support and support/ should be 2 different pages. Remove trailing slash
|
||||||
|
- Httparty (issue #...)
|
||||||
|
- Has_one => group by in the select
|
||||||
|
|
||||||
|
|
||||||
BACKLOG:
|
BACKLOG:
|
||||||
|
@ -35,6 +35,7 @@ module Locomotive
|
|||||||
|
|
||||||
initializer "serving fonts" do |app|
|
initializer "serving fonts" do |app|
|
||||||
app.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::Fonts', :path => %r{^/fonts}
|
app.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::Fonts', :path => %r{^/fonts}
|
||||||
|
app.middleware.insert_after Rack::Lock, '::Locomotive::Middlewares::SeoTrailingSlash'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -1 +1,2 @@
|
|||||||
require 'locomotive/middlewares/fonts'
|
require 'locomotive/middlewares/fonts'
|
||||||
|
require 'locomotive/middlewares/seo_trailing_slash'
|
24
lib/locomotive/middlewares/seo_trailing_slash.rb
Normal file
24
lib/locomotive/middlewares/seo_trailing_slash.rb
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
module Locomotive
|
||||||
|
module Middlewares
|
||||||
|
class SeoTrailingSlash
|
||||||
|
|
||||||
|
def initialize(app, opts = {})
|
||||||
|
@app = app
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
path = env['PATH_INFO']
|
||||||
|
|
||||||
|
if !path.starts_with('/admin/') && (match = path.match(%r{(.+)/$}))
|
||||||
|
response = Rack::Response.new
|
||||||
|
response.redirect(match[1], 301) # moved permanently
|
||||||
|
response.finish
|
||||||
|
response.to_a
|
||||||
|
else
|
||||||
|
@app.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -85,7 +85,7 @@ describe 'Locomotive rendering system' do
|
|||||||
@controller.send(:locomotive_page).should be_true
|
@controller.send(:locomotive_page).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'redirect page' do
|
context 'redirect' do
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
@page.redirect = true
|
@page.redirect = true
|
||||||
|
25
spec/requests/seo_trailing_slash_spec.rb
Normal file
25
spec/requests/seo_trailing_slash_spec.rb
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Locomotive::Middlewares::SeoTrailingSlash do
|
||||||
|
|
||||||
|
it 'does not process the "/" url' do
|
||||||
|
get '/'
|
||||||
|
response.status.should_not be(301)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not process the "/admin/" url' do
|
||||||
|
get '/admin/'
|
||||||
|
response.status.should_not be(301)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not process the "/admin/*" urls' do
|
||||||
|
get '/admin/login'
|
||||||
|
response.status.should_not be(301)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to the url without the trailing slash' do
|
||||||
|
get '/hello_world/'
|
||||||
|
response.status.should be(301)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user