Skip to content

Commit 046d621

Browse files
author
mcramer
committed
Fixed: redirect loop on redirect path
1 parent 056b11e commit 046d621

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

server/conf/vhost.conf.master

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,10 @@
257257
</tmpl_if>
258258
<tmpl_loop name="redirects">
259259
RewriteCond %{HTTP_HOST} <tmpl_var name='rewrite_domain'>$ [NC]
260-
RewriteCond %{REQUEST_URI} !^/webdav/
260+
<tmpl_if name="rewrite_is_url" op="==" value="n">
261+
RewriteCond %{REQUEST_URI} !^/webdav/
262+
RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
263+
</tmpl_if>
261264
RewriteRule ^/(.*)$ <tmpl_var name='rewrite_target'>$1 <tmpl_var name='rewrite_type'>
262265
</tmpl_loop>
263266
</tmpl_if>

server/plugins-available/apache2_plugin.inc.php

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -887,23 +887,27 @@ function update($event_name,$data) {
887887
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
888888
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
889889
'rewrite_target' => $rewrite_target,
890-
'rewrite_target_ssl' => $rewrite_target_ssl);
890+
'rewrite_target_ssl' => $rewrite_target_ssl,
891+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
891892
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']),
892893
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
893894
'rewrite_target' => $rewrite_target,
894-
'rewrite_target_ssl' => $rewrite_target_ssl);
895+
'rewrite_target_ssl' => $rewrite_target_ssl,
896+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
895897
break;
896898
case '*':
897899
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
898900
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
899901
'rewrite_target' => $rewrite_target,
900-
'rewrite_target_ssl' => $rewrite_target_ssl);
902+
'rewrite_target_ssl' => $rewrite_target_ssl,
903+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
901904
break;
902905
default:
903906
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
904907
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
905908
'rewrite_target' => $rewrite_target,
906-
'rewrite_target_ssl' => $rewrite_target_ssl);
909+
'rewrite_target_ssl' => $rewrite_target_ssl,
910+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
907911
}
908912
}
909913

@@ -968,25 +972,29 @@ function update($event_name,$data) {
968972
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']),
969973
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
970974
'rewrite_target' => $rewrite_target,
971-
'rewrite_target_ssl' => $rewrite_target_ssl);
975+
'rewrite_target_ssl' => $rewrite_target_ssl,
976+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
972977
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']),
973978
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
974979
'rewrite_target' => $rewrite_target,
975-
'rewrite_target_ssl' => $rewrite_target_ssl);
980+
'rewrite_target_ssl' => $rewrite_target_ssl,
981+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
976982
break;
977983
case '*':
978984
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
979985
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
980986
'rewrite_target' => $rewrite_target,
981-
'rewrite_target_ssl' => $rewrite_target_ssl);
987+
'rewrite_target_ssl' => $rewrite_target_ssl,
988+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
982989
break;
983990
default:
984991
if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote(substr($alias['domain'], 2));
985992
else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']);
986993
$rewrite_rules[] = array( 'rewrite_domain' => $domain_rule,
987994
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
988995
'rewrite_target' => $rewrite_target,
989-
'rewrite_target_ssl' => $rewrite_target_ssl);
996+
'rewrite_target_ssl' => $rewrite_target_ssl,
997+
'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
990998
}
991999
}
9921000
}
@@ -2567,6 +2575,10 @@ private function _rewrite_quote($string) {
25672575
return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string);
25682576
}
25692577

2578+
private function _is_url($string) {
2579+
return preg_match('/^(f|ht)tp(s)?:\/\//i', $string);
2580+
}
2581+
25702582
} // end class
25712583

25722584
?>

0 commit comments

Comments
 (0)