rack-no-www 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +12 -0
- data/Gemfile +2 -0
- data/README.md +63 -0
- data/Rakefile +4 -0
- data/autotest/discover.rb +1 -0
- data/lib/rack/no-www/version.rb +1 -1
- data/lib/rack/no-www.rb +2 -1
- data/rack-no-www.gemspec +25 -0
- data/spec/rack_no_www_spec.rb +44 -0
- data/spec/spec_helper.rb +4 -0
- metadata +41 -26
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
## 0.0.2 (June 14, 2011)
|
2
|
+
|
3
|
+
- Populate CHANGELOG.
|
4
|
+
- Streamline package files and spec helper.
|
5
|
+
- FIX: Spec for Ruby 1.9.2 compatibility.
|
6
|
+
- FIX: Add `Content-Type` header for 301 Redirect.
|
7
|
+
- Update content, format, and whitespace of README.
|
8
|
+
|
9
|
+
|
10
|
+
## 0.0.1 (June 22, 2010)
|
11
|
+
|
12
|
+
- Initial release
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
rack-no-www
|
2
|
+
===========
|
3
|
+
|
4
|
+
This piece of simple middlweware catches requests that begin with "www"
|
5
|
+
and redirects them to the equivalent "non-www" address. For example, a
|
6
|
+
request to "http://www.example.org" will be redirected to
|
7
|
+
"http://example.org".
|
8
|
+
|
9
|
+
This kind of redirect adheres to the [no-www philosophy][1], which
|
10
|
+
advocates websites having a canonical address without the wasteful "www"
|
11
|
+
subdomain. For a site to have a canonical address, it must have a
|
12
|
+
single, preferred URL. If a site has multiple URLs that return the same
|
13
|
+
content (e.g., a CNAME alias for "http://www.example.org" that points to
|
14
|
+
"http://example.org"), search engines might interpret these URLs as
|
15
|
+
*different* resources, thus [affecting search rankings and their
|
16
|
+
appearance][2]. That's why a site should have a canonical URL. But since
|
17
|
+
many users still think "www" is a necessary part of a web address, it's
|
18
|
+
important to allow "www" requests and redirect these requests to the
|
19
|
+
"non-www" equivalent.
|
20
|
+
|
21
|
+
Redirecting to a canonical URL might better be performed at the DNS
|
22
|
+
level, or directly by the webserver (e.g., [Apache][3] or [nginx][4]).
|
23
|
+
Alas, not all DNS services allow such configuration, and some
|
24
|
+
cloud-based hosting solutions, (e.g., [Heroku][5]) don't allow explicit
|
25
|
+
server configuration. Hence this piece of middleware.
|
26
|
+
|
27
|
+
|
28
|
+
Installation
|
29
|
+
------------
|
30
|
+
|
31
|
+
$ gem install rack-no-www
|
32
|
+
|
33
|
+
|
34
|
+
Usage
|
35
|
+
-----
|
36
|
+
|
37
|
+
Simply `require 'rack/no-www'` where appropriate, and then include the
|
38
|
+
middleware in the Rack stack. In Rails 3, for example, the
|
39
|
+
`config/application.rb` might be adjusted accordingly to place the
|
40
|
+
middleware at the top of the Rack stack::
|
41
|
+
|
42
|
+
Module MyApp
|
43
|
+
class Application < Rails::Application
|
44
|
+
...
|
45
|
+
if Rails.env.production?
|
46
|
+
config.middleware.insert_before Rack::Lock, Rack::NoWWW
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
Credits
|
53
|
+
-------
|
54
|
+
|
55
|
+
This gem is simply a packaged version (with tests) of the idea outlined [here][6] by Trevor Turk.
|
56
|
+
|
57
|
+
|
58
|
+
[1]: http://no-www.org
|
59
|
+
[2]: http://www.google.com/support/webmasters/bin/answer.py?answer=139066
|
60
|
+
[3]: http://www.plexusweb.com/staff/travis/blog/post/274/Redirect-www-Subdomain-to-no-www
|
61
|
+
[4]: http://snippets.aktagon.com/snippets/59-How-to-improve-your-PageRank-with-301-permanent-redirects-when-using-Nginx
|
62
|
+
[5]: http://heroku.com
|
63
|
+
[6]: http://trevorturk.com/2009/11/05/no-www-rack-middleware/
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/lib/rack/no-www/version.rb
CHANGED
data/lib/rack/no-www.rb
CHANGED
data/rack-no-www.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rack/no-www/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rack-no-www"
|
7
|
+
s.version = Rack::NoWWW::VERSION
|
8
|
+
s.authors = ["logicaltext"]
|
9
|
+
s.email = ["logicaltext@logicaltext.com"]
|
10
|
+
s.homepage = "http://github.com/logicaltext/rack-no-www"
|
11
|
+
s.summary = "Rack middleware for redirecting 'www' requests"
|
12
|
+
s.description = "Rack middleware for redirecting 'www' requests, " \
|
13
|
+
"based on the original idea by trevorturk "\
|
14
|
+
"(http://trevorturk.com/2009/11/05/no-www-rack-middleware/)."
|
15
|
+
|
16
|
+
s.required_rubygems_version = ">= 1.3.6"
|
17
|
+
s.rubyforge_project = "rack-no-www"
|
18
|
+
|
19
|
+
s.add_development_dependency "rspec", "~> 2.0"
|
20
|
+
s.add_development_dependency "rack-test"
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Rack::NoWWW" do
|
4
|
+
|
5
|
+
include Rack::Test::Methods
|
6
|
+
|
7
|
+
def app
|
8
|
+
mock_endpoint = lambda { |env| [200, {}, ['Hello, world.']] }
|
9
|
+
app = Rack::NoWWW.new(mock_endpoint)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "when receiving a request with a 'www'" do
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
request '/', {'HTTP_HOST' => 'www.example.org' }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should issue a 301 redirect" do
|
19
|
+
last_response.status.should == 301
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should redirect to the URL without the 'www'" do
|
23
|
+
last_response.headers['Location'].should == "http://example.org/"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have a text/html content type" do
|
27
|
+
last_response.headers['Content-Type'].should == "text/html"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have a body of 'Moved Permanently\\n'" do
|
31
|
+
last_response.body.should == "Moved Permanently\n"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "when receiving a request without a 'www'" do
|
37
|
+
it "should fall through to the app" do
|
38
|
+
get '/'
|
39
|
+
last_response.status.should == 200
|
40
|
+
last_response.body.should == "Hello, world."
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-no-www
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- logicaltext
|
@@ -15,10 +10,30 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
date: 2011-06-15 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "2.0"
|
24
|
+
type: :development
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rack-test
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id002
|
22
37
|
description: Rack middleware for redirecting 'www' requests, based on the original idea by trevorturk (http://trevorturk.com/2009/11/05/no-www-rack-middleware/).
|
23
38
|
email:
|
24
39
|
- logicaltext@logicaltext.com
|
@@ -29,11 +44,18 @@ extensions: []
|
|
29
44
|
extra_rdoc_files: []
|
30
45
|
|
31
46
|
files:
|
32
|
-
-
|
33
|
-
-
|
34
|
-
- lib/rack-no-www.rb
|
47
|
+
- CHANGELOG.md
|
48
|
+
- Gemfile
|
35
49
|
- LICENSE
|
36
|
-
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- autotest/discover.rb
|
53
|
+
- lib/rack-no-www.rb
|
54
|
+
- lib/rack/no-www.rb
|
55
|
+
- lib/rack/no-www/version.rb
|
56
|
+
- rack-no-www.gemspec
|
57
|
+
- spec/rack_no_www_spec.rb
|
58
|
+
- spec/spec_helper.rb
|
37
59
|
homepage: http://github.com/logicaltext/rack-no-www
|
38
60
|
licenses: []
|
39
61
|
|
@@ -47,27 +69,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
69
|
requirements:
|
48
70
|
- - ">="
|
49
71
|
- !ruby/object:Gem::Version
|
50
|
-
hash: 3
|
51
|
-
segments:
|
52
|
-
- 0
|
53
72
|
version: "0"
|
54
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
74
|
none: false
|
56
75
|
requirements:
|
57
76
|
- - ">="
|
58
77
|
- !ruby/object:Gem::Version
|
59
|
-
hash: 23
|
60
|
-
segments:
|
61
|
-
- 1
|
62
|
-
- 3
|
63
|
-
- 6
|
64
78
|
version: 1.3.6
|
65
79
|
requirements: []
|
66
80
|
|
67
81
|
rubyforge_project: rack-no-www
|
68
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.8.5
|
69
83
|
signing_key:
|
70
84
|
specification_version: 3
|
71
85
|
summary: Rack middleware for redirecting 'www' requests
|
72
|
-
test_files:
|
73
|
-
|
86
|
+
test_files:
|
87
|
+
- spec/rack_no_www_spec.rb
|
88
|
+
- spec/spec_helper.rb
|