$value) $this->settings[$key] = $value; } function encode_from ($url) { return '^'.$this->encode ($url).'$'; } function encode2nd ($url) { $url = urlencode ($url); $url = str_replace ('%2F', '/', $url); $url = str_replace ('%3A', ':', $url); $url = str_replace ('+', '%20', $url); $url = str_replace ('%24', '$', $url); return $url; } function encode ($url) { $url = urlencode ($url); $url = str_replace ('%2F', '/', $url); $url = str_replace ('+', '%20', $url); $url = str_replace ('.', '\\.', $url); return $url; } function encode_regex ($url) { $url = str_replace (' ', '%20', $url); $url = str_replace ('.', '\\.', $url); $url = str_replace ('\\.*', '.*', $url); $url = str_replace ('%24', '$', $url); return $url; } function add_referrer ($item, $match) { $from = $this->encode_from (ltrim ($item->url, '/')); if ($item->regex) $from = $this->encode_regex (ltrim ($item->url, '/')); if (($match->url_from || $match->url_notfrom) && $match->referrer) { $this->items[] = sprintf ('RewriteCond %%{HTTP_REFERER} %s [NC]', ($match->regex ? $this->encode_regex ($match->referrer) : $this->encode_from ($match->referrer))); if ($match->url_from) { $to = $this->target ($item->action_type, $match->url_from, $item->action_code, $item->regex); $this->items[] = sprintf ('RewriteRule %s %s', $from, $to); } if ($match->url_notfrom) { $to = $this->target ($item->action_type, $match->url_notfrom, $item->action_code, $item->regex); $this->items[] = sprintf ('RewriteRule %s %s', $from, $to); } } } function add_agent ($item, $match) { $from = $this->encode (ltrim ($item->url, '/')); if ($item->regex) $from = $this->encode_regex (ltrim ($item->url, '/')); if (($match->url_from || $match->url_notfrom) && $match->user_agent) { $this->items[] = sprintf ('RewriteCond %%{HTTP_USER_AGENT} %s [NC]', ($match->regex ? $this->encode_regex ($match->user_agent) : $this->encode2nd ($match->user_agent))); if ($match->url_from) { $to = $this->target ($item->action_type, $match->url_from, $item->action_code, $item->regex); $this->items[] = sprintf ('RewriteRule %s %s', $from, $to); } if ($match->url_notfrom) { $to = $this->target ($item->action_type, $match->url_notfrom, $item->action_code, $item->regex); $this->items[] = sprintf ('RewriteRule %s %s', $from, $to); } } } function add_url ($item, $match) { $to = $this->target ($item->action_type, $match->url, $item->action_code, $item->regex); $from = $this->encode_from (ltrim ($item->url, '/')); if ($item->regex) $from = $this->encode_regex (ltrim ($item->url, '/')); if ($to) $this->items[] = sprintf ('RewriteRule %s %s', $from, $to); } function action_random ($data, $code, $regex) { // Pick a WP post at random global $wpdb; $post = $wpdb->get_var ("SELECT ID FROM {$wpdb->posts} ORDER BY RAND() LIMIT 0,1"); $url = parse_url (get_permalink ($post)); return sprintf ('%s [R=%d,L]', $this->encode ($url['path']), $code); } function action_pass ($data, $code, $regex) { if ($regex) return sprintf ('%s [L]', $this->encode2nd ($data), $code); else return sprintf ('%s [L]', $this->encode2nd ($data), $code); } function action_error ($data, $code, $regex) { if ($code == '410') return '/ [G,L]'; return '/ [F,L]'; } function action_url ($data, $code, $regex) { if ($regex) return sprintf ('%s [R=%d,L]', $this->encode2nd ($data), $code); else return sprintf ('%s [R=%d,L]', $this->encode2nd ($data), $code); } function target ($action, $data, $code, $regex) { $cmd = 'action_'.$action; if (method_exists ($this, $cmd)) return $this->$cmd ($data, $code, $regex); return ''; } function add ($item) { $cmd = 'add_'.$item->match_type; if (method_exists ($this, $cmd)) $this->$cmd ($item, $item->match); } function generate ($name) { // Head of redirection section - do not localize this global $redirection; $text[] = '# Created by Redirection Module: '.$name; $text[] = '# '.date ('r'); $text[] = '# Redirection '.$redirection->version ().' - http://urbangiraffe.com/plugins/redirection/'; $text[] = ''; // Default blocked files - I can't think of a reason not to block these $text[] = ''; $text[] = 'order allow,deny'; $text[] = 'deny from all'; $text[] = ''; $text[] = ''; // PHP options if (isset ($this->settings['error_level']) && $this->settings['error_level'] != 'default') $text[] = 'php_value error_reporting '.($this->settings == 'none' ? '0' : 'E_ALL'); if (isset ($this->settings['memory_limit']) && $this->settings['memory_limit'] != 0) $text[] = 'php_value memory_limit '.$this->settings['memory_limit'].'M'; if ($this->settings['allow_ip'] || $this->settings['ban_ip']) { $text[] = ''; $text[] = 'order allow,deny'; if ($this->settings['ban_ip']) { $ips = array_filter (explode (',', $this->settings['ban_ip'])); if (count ($ips) > 0) { foreach ($ips AS $ip) $text[] = 'deny from '.$ip; } } if ($this->settings['allow_ip']) { $ips = array_filter (explode (',', $this->settings['allow_ip'])); if (count ($ips) > 0) { foreach ($ips AS $ip) $text[] = 'allow from '.$ip; } } else $text[] = 'allow from all'; } // mod_rewrite section $text[] = ''; $text[] = 'Options +FollowSymlinks'; $text[] = ''; $text[] = ''; if ($this->settings['canonical'] != 'default') { $text[] = 'RewriteEngine On'; $base = $this->settings['site']; if ($base == '') $base = get_option ('home'); $parts = parse_url ($base); $base = str_replace ('www.', '', $parts['host']); if ($this->settings['canonical'] == 'nowww') { $text[] = 'RewriteCond %{HTTP_HOST} ^www\.'.str_replace ('.', '\\.', $base).'$ [NC]'; $text[] = 'RewriteRule ^(.*)$ http://'.$base.'/$1 [R=301,L]'; } else if ($this->settings['canonical'] == 'www') { $text[] = 'RewriteCond %{HTTP_HOST} ^'.str_replace ('.', '\\.', $base).'$ [NC]'; $text[] = 'RewriteRule ^(.*)$ http://www.'.$base.'/$1 [R=301,L]'; } $text[] = ''; } if ($this->settings['strip_index'] == 'yes') { $text[] = 'RewriteCond %{THE_REQUEST} (.*)index\.(php|htm|html)\ HTTP/'; $text[] = 'RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,NC,L]'; $text[] = ''; } // Add redirects if (is_array ($this->items)) $text = array_merge ($text, $this->items); // End of mod_rewrite $text[] = ''; $text[] = ''; if ($this->settings['raw']) $text[] = $this->settings['raw']; // End of redirection section $text[] = '# End of Redirection'; $text[] = ''; $text = implode ("\r\n", $text); $text = str_replace ("\r\n\r\n\r\n", "\r\n", $text); $text = str_replace ("\r\n\r\n\r\n", "\r\n", $text); return $text; } function save ($filename, $name) { die("SAVING HTACCESS"); $text = $this->generate ($name); // Does the file already exist? if (file_exists ($filename)) { $existing = @file_get_contents ($filename); // Remove any existing Redirection module $text .= preg_replace ('@# Created by Redirection Module: '.$name.'(.*?)# End of Redirection@s', '', $existing); } $file = @fopen ($filename, 'w'); if ($file) { $text = str_replace ("\r\n\r\n\r\n", "\r\n", $text); $text = str_replace ("\r\n\r\n\r\n", "\r\n", $text); fwrite ($file, $text); fclose ($file); return true; } return false; } } ?>