From e64fbbc9ba646207fa14eb716444d3db1fc87406 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Tue, 20 Sep 2011 07:10:08 -0400
Subject: [PATCH] - Added redirects for nginx. - Added SEO redirects (both Apache & nginx) to redirect from non-www website to www website or vice versa. - Introduced placeholder [scheme] for redirect paths for alias and subdomains; will be replaced with http or https, depending on what the visitor uses.
---
server/plugins-available/apache2_plugin.inc.php | 79 +++++++++++++++++++++++++++++----------
1 files changed, 59 insertions(+), 20 deletions(-)
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 5a702b3..12f8cc5 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -671,34 +671,58 @@
if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
//$vhost_data['document_root'] = $data['new']['document_root'].'/web';
+
+ // Set SEO Redirect
+ if($data['new']['seo_redirect'] != '' && ($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*')){
+ $vhost_data['seo_redirect_enabled'] = 1;
+ if($data['new']['seo_redirect'] == 'non_www_to_www'){
+ $vhost_data['seo_redirect_origin_domain'] = $data['new']['domain'];
+ $vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+ }
+ if($data['new']['seo_redirect'] == 'www_to_non_www'){
+ $vhost_data['seo_redirect_origin_domain'] = 'www.'.$data['new']['domain'];
+ $vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+ }
+ } else {
+ $vhost_data['seo_redirect_enabled'] = 0;
+ }
+
$tpl->setVar($vhost_data);
// Rewrite rules
$rewrite_rules = array();
if($data['new']['redirect_type'] != '') {
if(substr($data['new']['redirect_path'],-1) != '/') $data['new']['redirect_path'] .= '/';
+ $rewrite_target = $data['new']['redirect_path'];
+ $rewrite_target_ssl = $data['new']['redirect_path'];
/* Disabled path extension
if($data['new']['redirect_type'] == 'no' && substr($data['new']['redirect_path'],0,4) != 'http') {
$data['new']['redirect_path'] = $data['new']['document_root'].'/web'.realpath($data['new']['redirect_path']).'/';
}
*/
- $rewrite_rules[] = array( 'rewrite_domain' => $data['new']['domain'],
- 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
- 'rewrite_target' => $data['new']['redirect_path']);
-
switch($data['new']['subdomain']) {
case 'www':
- $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$data['new']['domain'],
+ $rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
+ 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
+ $rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$data['new']['domain'],
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
- 'rewrite_target' => $data['new']['redirect_path']);
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
break;
case '*':
- // TODO
- //$rewrite_rules[] = array( 'rewrite_domain' => '*'.$alias['domain'],
- // 'rewrite_type' => $alias['redirect_type'],
- // 'rewrite_target' => $alias['redirect_path']);
+ $rewrite_rules[] = array( 'rewrite_domain' => $data['new']['domain'],
+ 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
break;
+ default:
+ $rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
+ 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
}
}
@@ -729,27 +753,42 @@
$app->log('Add server alias: '.$alias['domain'],LOGLEVEL_DEBUG);
// Rewriting
if($alias['redirect_type'] != '') {
- if(substr($data['new']['redirect_path'],-1) != '/') $data['new']['redirect_path'] .= '/';
+ if(substr($alias['redirect_path'],-1) != '/') $alias['redirect_path'] .= '/';
+ if(substr($alias['redirect_path'],0,8) == '[scheme]'){
+ $rewrite_target = 'http'.substr($alias['redirect_path'],8);
+ $rewrite_target_ssl = 'https'.substr($alias['redirect_path'],8);
+ } else {
+ $rewrite_target = $alias['redirect_path'];
+ $rewrite_target_ssl = $alias['redirect_path'];
+ }
/* Disabled the path extension
if($data['new']['redirect_type'] == 'no' && substr($data['new']['redirect_path'],0,4) != 'http') {
$data['new']['redirect_path'] = $data['new']['document_root'].'/web'.realpath($data['new']['redirect_path']).'/';
}
*/
- $rewrite_rules[] = array( 'rewrite_domain' => $alias['domain'],
- 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
- 'rewrite_target' => $alias['redirect_path']);
+
switch($alias['subdomain']) {
case 'www':
- $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$alias['domain'],
+ $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
+ 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
+ $rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$alias['domain'],
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
- 'rewrite_target' => $alias['redirect_path']);
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
break;
case '*':
- // TODO
- //$rewrite_rules[] = array( 'rewrite_domain' => '*'.$alias['domain'],
- // 'rewrite_type' => $alias['redirect_type'],
- // 'rewrite_target' => $alias['redirect_path']);
+ $rewrite_rules[] = array( 'rewrite_domain' => $alias['domain'],
+ 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
break;
+ default:
+ $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
+ 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
+ 'rewrite_target' => $rewrite_target,
+ 'rewrite_target_ssl' => $rewrite_target_ssl);
}
}
}
--
Gitblit v1.9.1