Module: Jekyll::ServerSideRedirects::Apache
- Defined in:
- lib/jekyll-server-side-redirects/servers/apache.rb
Class Method Summary collapse
- .generate_htaccess(redirects_data) ⇒ Object
- .generate_redirects(site) ⇒ Object
- .parse_existing_redirects(file_path) ⇒ Object
- .process_redirects(data) ⇒ Object
Class Method Details
.generate_htaccess(redirects_data) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jekyll-server-side-redirects/servers/apache.rb', line 14 def self.generate_htaccess(redirects_data) file_path = ".htaccess" existing_redirects = [] if File.exist?(file_path) existing_redirects = parse_existing_redirects(file_path) end all_redirects = (existing_redirects + redirects_data).uniq { |r| r['source'] } File.open(file_path, "w") do |file| file.puts "# .htaccess file generated by Jekyll Server-Side Redirects" file.puts "" all_redirects.each do |redirect| file.puts "Redirect #{redirect['type']} #{redirect['source']} #{redirect['destination']}" end end end |
.generate_redirects(site) ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/jekyll-server-side-redirects/servers/apache.rb', line 4 def self.generate_redirects(site) redirects_data = [] redirects_data += process_redirects(site.pages) redirects_data += process_redirects(site.posts.docs) generate_htaccess(redirects_data) redirects_data end |
.parse_existing_redirects(file_path) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/jekyll-server-side-redirects/servers/apache.rb', line 34 def self.parse_existing_redirects(file_path) redirects = [] File.readlines(file_path).each do |line| next unless line.strip.start_with?("Redirect") if line =~ /^Redirect\s+(\d{3})\s+(\S+)\s+(\S+)/ type, source, destination = $1.to_i, $2, $3 redirects << { 'source' => source, 'destination' => destination, 'type' => type } end end redirects end |
.process_redirects(data) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/jekyll-server-side-redirects/servers/apache.rb', line 53 def self.process_redirects(data) redirects = [] data.each do |item| next unless item.data['redirect_from'] redirect_from = item.data['redirect_from'] redirect_from = [redirect_from] unless redirect_from.is_a?(Array) redirect_from.each do |source| redirects << { 'source' => source, 'destination' => item.permalink, 'type' => item.data['redirect_type'] || 301 } end end redirects end |