| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/clients/client2/web19/web/wp-content/plugins/redirection/fileio/ |
Upload File : |
<?php
class Red_Apache_File extends Red_FileIO {
public $htaccess;
function export( array $items ) {
$filename = 'redirection-'.date_i18n( get_option( 'date_format' ) ).'.htaccess';
header( 'Content-Type: application/octet-stream' );
header( 'Cache-Control: no-cache, must-revalidate' );
header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
echo $this->get( $items );
}
public function get( array $items ) {
include_once dirname( dirname( __FILE__ ) ).'/models/htaccess.php';
$htaccess = new Red_Htaccess();
foreach ( $items as $item ) {
$htaccess->add( $item );
}
return $htaccess->get();
}
function load( $group, $data, $filename = '' ) {
// Remove any comments
$data = preg_replace( '@#(.*)@', '', $data );
$data = str_replace( "\n", "\r", $data );
$data = str_replace( '\\ ', '%20', $data );
// Split it into lines
$lines = array_filter( explode( "\r", $data ) );
if ( count( $lines ) > 0 ) {
foreach ( $lines as $line ) {
if ( preg_match( '@rewriterule\s+(.*?)\s+(.*?)\s+(\[.*\])*@i', $line, $matches ) > 0 ) {
$items[] = array(
'source' => $this->regex_url( $matches[1] ),
'target' => $this->decode_url( $matches[2] ),
'code' => $this->get_code( $matches[3] ),
'regex' => $this->is_regex( $matches[1] ),
);
}
elseif ( preg_match( '@Redirect\s+(.*?)\s+(.*?)\s+(.*)@i', $line, $matches ) > 0 ) {
$items[] = array(
'source' => $this->decode_url( $matches[2] ),
'target' => $this->decode_url( $matches[3] ),
'code' => $this->get_code( $matches[1] ),
);
}
elseif ( preg_match( '@Redirect\s+(.*?)\s+(.*?)@i', $line, $matches ) > 0 ) {
$items[] = array(
'source' => $this->decode_url( $matches[1] ),
'target' => $this->decode_url( $matches[2] ),
'code' => 302,
);
}
elseif ( preg_match( '@Redirectmatch\s+(.*?)\s+(.*?)\s+(.*)@i', $line, $matches ) > 0 ) {
$items[] = array(
'source' => $this->decode_url( $matches[2] ),
'target' => $this->decode_url( $matches[3] ),
'code' => $this->get_code( $matches[1] ),
'regex' => true,
);
}
elseif ( preg_match( '@Redirectmatch\s+(.*?)\s+(.*?)@i', $line, $matches ) > 0 ) {
$items[] = array(
'source' => $this->decode_url( $matches[1] ),
'target' => $this->decode_url( $matches[2] ),
'code' => 302,
'regex' => true,
);
}
}
// Add items to group
if ( count( $items ) > 0 ) {
foreach ( $items as $item ) {
$item['group_id'] = $group;
$item['red_action'] = 'url';
$item['match'] = 'url';
if ( $item['code'] === 0 )
$item['red_action'] = 'pass';
Red_Item::create( $item );
}
return count( $items );
}
}
return 0;
}
function decode_url( $url ) {
$url = rawurldecode( $url );
$url = str_replace( '\\.', '.', $url );
return $url;
}
function is_str_regex( $url ) {
$regex = '()[]$^?+.';
$escape = false;
for ( $x = 0; $x < strlen( $url ); $x++ ) {
if ( $url{$x} === '\\' )
$escape = true;
elseif ( strpos( $regex, $url{$x} ) !== false && ! $escape )
return true;
else
$escape = false;
}
return false;
}
function is_regex( $url ) {
if ( $this->is_str_regex( $url ) ) {
$tmp = ltrim( $url, '^' );
$tmp = rtrim( $tmp, '$' );
if ( $this->is_str_regex( $tmp ) )
return true;
}
return false;
}
function regex_url ($url) {
if ( $this->is_str_regex( $url ) ) {
$tmp = ltrim( $url, '^' );
$tmp = rtrim( $tmp, '$' );
if ( $this->is_str_regex( $tmp ) === false )
return '/'.$this->decode_url( $tmp );
return '/'.$this->decode_url( $url );
}
return $this->decode_url( $url );
}
function get_code ($code) {
if ( strpos( $code, '301' ) !== false || stripos( $code, 'permanent' ) !== false )
return 301;
elseif ( strpos( $code, '302' ) !== false )
return 302;
elseif ( strpos( $code, '307' ) !== false || stripos( $code, 'seeother' ) !== false )
return 307;
elseif ( strpos( $code, '404' ) !== false || stripos( $code, 'forbidden' ) !== false || strpos( $code, 'F' ) !== false )
return 404;
elseif ( strpos( $code, '410' ) !== false || stripos( $code, 'gone' ) !== false || strpos( $code, 'G' ) !== false )
return 410;
return 0;
}
}