Файловый менеджер - Редактировать - /home/wuectly/www/03cbe/redirect.tar
Назад
form/excludes.xml 0000604 00000000726 15245562552 0010061 0 ustar 00 <?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="term" type="text" label="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_TERM_LABEL" description="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_TERM_DESC" required="true" /> <field name="regexp" type="checkbox" label="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_REGEXP_LABEL" description="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_REGEXP_DESC" filter="integer" /> </fieldset> </form> redirect.php 0000604 00000023045 15245562552 0007071 0 ustar 00 <?php /** * @package Joomla.Plugin * @subpackage System.redirect * * @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; /** * Plugin class for redirect handling. * * @since 1.6 */ class PlgSystemRedirect extends JPlugin { /** * Affects constructor behavior. If true, language files will be loaded automatically. * * @var boolean * @since 3.4 */ protected $autoloadLanguage = false; /** * The global exception handler registered before the plugin was instantiated * * @var callable * @since 3.6 */ private static $previousExceptionHandler; /** * Constructor. * * @param object &$subject The object to observe * @param array $config An optional associative array of configuration settings. * * @since 1.6 */ public function __construct(&$subject, $config) { parent::__construct($subject, $config); // Set the JError handler for E_ERROR to be the class' handleError method. JError::setErrorHandling(E_ERROR, 'callback', array('PlgSystemRedirect', 'handleError')); // Register the previously defined exception handler so we can forward errors to it self::$previousExceptionHandler = set_exception_handler(array('PlgSystemRedirect', 'handleException')); } /** * Method to handle an error condition from JError. * * @param JException $error The JException object to be handled. * * @return void * * @since 1.6 */ public static function handleError(JException $error) { self::doErrorHandling($error); } /** * Method to handle an uncaught exception. * * @param Exception|Throwable $exception The Exception or Throwable object to be handled. * * @return void * * @since 3.5 * @throws InvalidArgumentException */ public static function handleException($exception) { // If this isn't a Throwable then bail out if (!($exception instanceof Throwable) && !($exception instanceof Exception)) { throw new InvalidArgumentException( sprintf('The error handler requires an Exception or Throwable object, a "%s" object was given instead.', get_class($exception)) ); } self::doErrorHandling($exception); } /** * Internal processor for all error handlers * * @param Exception|Throwable $error The Exception or Throwable object to be handled. * * @return void * * @since 3.5 */ private static function doErrorHandling($error) { $app = JFactory::getApplication(); if ($app->isClient('administrator') || ((int) $error->getCode() !== 404)) { // Proxy to the previous exception handler if available, otherwise just render the error page if (self::$previousExceptionHandler) { call_user_func_array(self::$previousExceptionHandler, array($error)); } else { JErrorPage::render($error); } } $uri = JUri::getInstance(); // These are the original URLs $orgurl = rawurldecode($uri->toString(array('scheme', 'host', 'port', 'path', 'query', 'fragment'))); $orgurlRel = rawurldecode($uri->toString(array('path', 'query', 'fragment'))); // The above doesn't work for sub directories, so do this $orgurlRootRel = str_replace(JUri::root(), '', $orgurl); // For when users have added / to the url $orgurlRootRelSlash = str_replace(JUri::root(), '/', $orgurl); $orgurlWithoutQuery = rawurldecode($uri->toString(array('scheme', 'host', 'port', 'path', 'fragment'))); $orgurlRelWithoutQuery = rawurldecode($uri->toString(array('path', 'fragment'))); // These are the URLs we save and use $url = StringHelper::strtolower(rawurldecode($uri->toString(array('scheme', 'host', 'port', 'path', 'query', 'fragment')))); $urlRel = StringHelper::strtolower(rawurldecode($uri->toString(array('path', 'query', 'fragment')))); // The above doesn't work for sub directories, so do this $urlRootRel = str_replace(JUri::root(), '', $url); // For when users have added / to the url $urlRootRelSlash = str_replace(JUri::root(), '/', $url); $urlWithoutQuery = StringHelper::strtolower(rawurldecode($uri->toString(array('scheme', 'host', 'port', 'path', 'fragment')))); $urlRelWithoutQuery = StringHelper::strtolower(rawurldecode($uri->toString(array('path', 'fragment')))); $plugin = JPluginHelper::getPlugin('system', 'redirect'); $params = new Registry($plugin->params); $excludes = (array) $params->get('exclude_urls'); $skipUrl = false; foreach ($excludes as $exclude) { if (empty($exclude->term)) { continue; } if (!empty($exclude->regexp)) { // Only check $url, because it includes all other sub urls if (preg_match('/' . $exclude->term . '/i', $orgurlRel)) { $skipUrl = true; break; } } else { if (StringHelper::strpos($orgurlRel, $exclude->term) !== false) { $skipUrl = true; break; } } } // Why is this (still) here? if ($skipUrl || (strpos($url, 'mosConfig_') !== false) || (strpos($url, '=http://') !== false)) { JErrorPage::render($error); } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('*') ->from($db->quoteName('#__redirect_links')) ->where( '(' . $db->quoteName('old_url') . ' = ' . $db->quote($url) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($urlRel) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($urlRootRel) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($urlRootRelSlash) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($urlWithoutQuery) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($urlRelWithoutQuery) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurl) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurlRel) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurlRootRel) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurlRootRelSlash) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurlWithoutQuery) . ' OR ' . $db->quoteName('old_url') . ' = ' . $db->quote($orgurlRelWithoutQuery) . ')' ); $db->setQuery($query); $redirect = null; try { $redirects = $db->loadAssocList(); } catch (Exception $e) { JErrorPage::render(new Exception(JText::_('PLG_SYSTEM_REDIRECT_ERROR_UPDATING_DATABASE'), 500, $e)); } $possibleMatches = array_unique( array( $url, $urlRel, $urlRootRel, $urlRootRelSlash, $urlWithoutQuery, $urlRelWithoutQuery, $orgurl, $orgurlRel, $orgurlRootRel, $orgurlRootRelSlash, $orgurlWithoutQuery, $orgurlRelWithoutQuery, ) ); foreach ($possibleMatches as $match) { if (($index = array_search($match, array_column($redirects, 'old_url'))) !== false) { $redirect = (object) $redirects[$index]; if ((int) $redirect->published === 1) { break; } } } // A redirect object was found and, if published, will be used if ($redirect !== null && ((int) $redirect->published === 1)) { if (!$redirect->header || (bool) JComponentHelper::getParams('com_redirect')->get('mode', false) === false) { $redirect->header = 301; } if ($redirect->header < 400 && $redirect->header >= 300) { $urlQuery = $uri->getQuery(); $oldUrlParts = parse_url($redirect->old_url); $newUrl = $redirect->new_url; if ($urlQuery !== '' && empty($oldUrlParts['query'])) { $newUrl .= '?' . $urlQuery; } $dest = JUri::isInternal($newUrl) || strpos($newUrl, 'http') === false ? JRoute::_($newUrl) : $newUrl; // In case the url contains double // lets remove it $destination = str_replace(JUri::root() . '/', JUri::root(), $dest); // Always count redirect hits $redirect->hits++; try { $db->updateObject('#__redirect_links', $redirect, 'id'); } catch (Exception $e) { // We don't log issues for now } $app->redirect($destination, (int) $redirect->header); } JErrorPage::render(new RuntimeException($error->getMessage(), $redirect->header, $error)); } // No redirect object was found so we create an entry in the redirect table elseif ($redirect === null) { $params = new Registry(JPluginHelper::getPlugin('system', 'redirect')->params); if ((bool) $params->get('collect_urls', 1)) { if (!$params->get('includeUrl', 1)) { $url = $urlRel; } $data = (object) array( 'id' => 0, 'old_url' => $url, 'referer' => $app->input->server->getString('HTTP_REFERER', ''), 'hits' => 1, 'published' => 0, 'created_date' => JFactory::getDate()->toSql() ); try { $db->insertObject('#__redirect_links', $data, 'id'); } catch (Exception $e) { JErrorPage::render(new Exception(JText::_('PLG_SYSTEM_REDIRECT_ERROR_UPDATING_DATABASE'), 500, $e)); } } } // We have an unpublished redirect object, increment the hit counter else { $redirect->hits++; try { $db->updateObject('#__redirect_links', $redirect, 'id'); } catch (Exception $e) { JErrorPage::render(new Exception(JText::_('PLG_SYSTEM_REDIRECT_ERROR_UPDATING_DATABASE'), 500, $e)); } } // Proxy to the previous exception handler if available, otherwise just render the error page if (self::$previousExceptionHandler) { call_user_func_array(self::$previousExceptionHandler, array($error)); } else { JErrorPage::render($error); } } } redirect.xml 0000604 00000003524 15245562552 0007102 0 ustar 00 <?xml version="1.0" encoding="utf-8"?> <extension version="3.1" type="plugin" group="system" method="upgrade"> <name>plg_system_redirect</name> <author>Joomla! Project</author> <creationDate>April 2009</creationDate> <copyright>(C) 2009 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>PLG_SYSTEM_REDIRECT_XML_DESCRIPTION</description> <files> <folder>form</folder> <filename plugin="redirect">redirect.php</filename> </files> <languages> <language tag="en-GB">en-GB.plg_system_redirect.ini</language> <language tag="en-GB">en-GB.plg_system_redirect.sys.ini</language> </languages> <config> <fields name="params"> <fieldset name="basic"> <field name="collect_urls" type="radio" label="PLG_SYSTEM_REDIRECT_FIELD_COLLECT_URLS_LABEL" description="PLG_SYSTEM_REDIRECT_FIELD_COLLECT_URLS_DESC" default="1" filter="integer" class="btn-group btn-group-yesno" > <option value="1">JENABLED</option> <option value="0">JDISABLED</option> </field> <field name="includeUrl" type="radio" label="PLG_SYSTEM_REDIRECT_FIELD_STORE_FULL_URL_LABEL" description="PLG_SYSTEM_REDIRECT_FIELD_STORE_FULL_URL_DESC" default="1" filter="integer" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="exclude_urls" type="subform" label="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_LABEL" description="PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_DESC" multiple="true" formsource="plugins/system/redirect/form/excludes.xml" /> </fieldset> </fields> </config> </extension>
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка