function permlink_to_param() { if (!empty($_SERVER['PATH_INFO'])) { // Fetch the rewrite rules. $rewrite = rewrite_rules('matches'); $pathinfo = $_SERVER['PATH_INFO']; // Trim leading '/'. $pathinfo = preg_replace('!^/!', '', $pathinfo); if (!empty($rewrite)) { // Get the name of the file requesting path info. $req_uri = $_SERVER['REQUEST_URI']; $req_uri = str_replace($pathinfo, '', $req_uri); $req_uri = preg_replace("!/+\$!", '', $req_uri); $req_uri = explode('/', $req_uri); $req_uri = $req_uri[count($req_uri) - 1]; // Look for matches. $pathinfomatch = $pathinfo; foreach ($rewrite as $match => $query) { // If the request URI is the anchor of the match, prepend it // to the path info. if (!empty($req_uri) && strpos($match, $req_uri) === 0) { $pathinfomatch = $req_uri . '/' . $pathinfo; } if (preg_match("!^{$match}!", $pathinfomatch, $matches)) { // Got a match. // Trim the query of everything up to the '?'. $query = preg_replace("!^.+\\?!", '', $query); // Substitute the substring matches into the query. @eval("\$query = \"{$query}\";"); // Parse the query. parse_str($query, $_GET); break; } } } } }
<p><?php printf(_LANG_WPL_USE_HTACCESS, $permalink_structure); ?> </p> <?php $site_root = str_replace('http://', '', trim($siteurl)); $site_root = preg_replace('|([^/]*)(.*)|i', '$2', $site_root); if ('/' != substr($site_root, -1)) { $site_root = $site_root . '/'; } $home_root = str_replace('http://', '', trim($siteurl)); $home_root = preg_replace('|([^/]*)(.*)|i', '$2', $home_root); if ('/' != substr($home_root, -1)) { $home_root = $home_root . '/'; } $rewrite = rewrite_rules('', $permalink_structure); $rule_text = ''; foreach ($rewrite as $match => $query) { if (strstr($query, 'index.php')) { $rule_text .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA]\n"; } else { $rule_text .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA]\n"; } } ?> <form action=""> <p> <textarea rows="5" style="width: 98%;"><?php echo "RewriteEngine On\nRewriteBase {$home_root}\n{$rule_text}"; ?>
/** * Возвращает текущий URI * Нужна для того, чтобы иметь возможность переопределить URI. * По сути является эмулятором внутреннего mod_rewrite * @return string */ private function detectURI() { if (strpos($_SERVER['REQUEST_URI'], '/', 1) === 1) { self::error404(); } $request_uri = ltrim(urldecode(trim($_SERVER['REQUEST_URI'])), '/'); if (!$request_uri) { return; } // игнорируемые для детекта url if (preg_match('/^(admin|install|migrate|index)(.*)/ui', $request_uri)) { return; } // Есть ли в url GET параметры $pos_que = mb_strpos($request_uri, '?'); // если есть и это не go/url= и load/url= if ($pos_que !== false && mb_strpos($request_uri, '/url=') === false) { // получаем строку запроса $query_data = array(); $query_str = mb_substr($request_uri, $pos_que + 1); // удаляем строку запроса из URL $uri = rtrim(mb_substr($request_uri, 0, $pos_que), '/'); // парсим строку запроса parse_str($query_str, $query_data); // добавляем к полученным данным $_REQUEST // именно в таком порядке, чтобы POST имел преимущество над GET // это необходимо если в $_REQUEST GET запроса нет, но в url он есть $_REQUEST = array_merge($query_data, $_REQUEST); // если в $uri пусто (например главная страница) if (!$uri) { return; } } else { $uri = $request_uri; } $rules = array(); if (self::includeFile('url_rewrite.php')) { //подключаем список rewrite-правил if (function_exists('rewrite_rules')) { //получаем правила $rules = rewrite_rules(); } } if (self::includeFile('custom_rewrite.php')) { //подключаем список пользовательских rewrite-правил if (function_exists('custom_rewrite_rules')) { //добавляем к полученным ранее правилам пользовательские $rules = array_merge($rules, custom_rewrite_rules()); } } $found = false; // Запоминаем реальный uri $this->real_uri = $uri; if ($rules) { //перебираем правила foreach ($rules as $rule) { //небольшая валидация правила if (!$rule['source'] || !$rule['target'] || !$rule['action']) { continue; } //проверяем совпадение выражения source с текущим uri if (preg_match($rule['source'], $uri, $matches)) { //перебираем совпавшие сегменты и добавляем их в target //чтобы сохранить параметры из $uri в новом адресе foreach ($matches as $key => $value) { if (!$key) { continue; } if (mb_strstr($rule['target'], '{' . $key . '}')) { $rule['target'] = str_replace('{' . $key . '}', $value, $rule['target']); } } //выполняем действие switch ($rule['action']) { case 'rewrite': $uri = $rule['target']; $found = true; break; case 'redirect': self::redirect($rule['target']); break; case 'redirect-301': self::redirect($rule['target'], '301'); break; case 'alias': // Разбираем $rule['target'] на путь к файлу и его параметры $t = parse_url($rule['target']); // Для удобства формируем массив $include_query // переменные будут сохранены в элементах массива if (!empty($t['query'])) { mb_parse_str($t['query'], $include_query); } if (file_exists(PATH . '/' . $t['path'])) { include_once PATH . '/' . $t['path']; } self::halt(); } } if ($found) { break; } } } return $uri; }
$wpj_foot = <<<EOD </body></html> EOD; $use_cache = 1; // No reason not to /* Including config and functions files */ $curpath = dirname(__FILE__) . '/'; if (!file_exists($curpath . '/wp-config.php')) { die($wpj_head . _LANG_WA_HEADER_GUIDE1 . $wpj_foot); } $wp_inblock = 0; require $curpath . '/wp-config.php'; $path_info = array(); if (!empty($_SERVER['PATH_INFO'])) { // Fetch the rewrite rules. $rewrite = rewrite_rules('matches'); $pathinfo = $_SERVER['PATH_INFO']; // Trim leading '/'. $pathinfo = preg_replace('!^/!', '', $pathinfo); if (!empty($rewrite)) { // Get the name of the file requesting path info. $req_uri = $_SERVER['REQUEST_URI']; $req_uri = str_replace($pathinfo, '', $req_uri); $req_uri = preg_replace("!/+\$!", '', $req_uri); $req_uri = explode('/', $req_uri); $req_uri = $req_uri[count($req_uri) - 1]; // Look for matches. $pathinfomatch = $pathinfo; foreach ($rewrite as $match => $query) { // If the request URI is the anchor of the match, prepend it // to the path info.
$usersmenus = new usersMenus(); if (!$usersmenus->AsDansGuardianAdministrator) { $tpl = new templates(); $alert = $tpl->_ENGINE_parse_body('{ERROR_NO_PRIVS}'); echo "alert('{$alert}');"; die; } if (isset($_GET["rewrite_rules_list"])) { rewrite_rules_list(); exit; } if (isset($_POST["rewrite_rule_enable"])) { rewrite_rule_enable(); exit; } rewrite_rules(); function rewrite_rules_list() { $ID = $_GET["ID"]; $tpl = new templates(); $MyPage = CurrentPageName(); $q = new mysql_squid_builder(); if ($ID == 0) { $sock = new sockets(); $ligne = unserialize(base64_decode($sock->GET_INFO("DansGuardianDefaultMainRule"))); } else { $sql = "SELECT RewriteRules FROM webfilter_rules WHERE ID={$ID}"; $ligne = mysql_fetch_array($q->QUERY_SQL($sql)); } $RewriteRules = unserialize(base64_decode($ligne["RewriteRules"])); $search = '%';