Jump to content
Sign in to follow this  
ivanosovsky

Redirect 301 не работает url c кириллицей

Recommended Posts

Проблема с редиректом 301

например сайт my.su на нем созданы страницы содержащие кириллицу в ЧПУ например my.su/Ремонт%20квартир/

соответственно google благополучно эти страницы выкинул из индекса но т.к. на них основной вес надо было что-то делать

мое решение было такое: делаю дубли страниц на другой url например my.su/remont_kvartir/

и ставлю редирект 301  в .htaccess таким образом

Redirect 301 /Ремонт%20квартир/ http://my.su/remont_kvartir/

файл:

.htaccess - кодировка utf-8 (без BOM)

СОДЕРЖАНИЕ:

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
Redirect 301 /Ремонт%20квартир/ http://my.su/remont_kvartir/
 
К сожалению этот Вариант не прокатил - никуда перенаправления не идет
Кто подскажет как реализовать, с утра бьюсь, думал все просто.???

Share this post


Link to post
Share on other sites

Увы...

Redirect 301 /Ремонт%20квартир/ http://my.su/remont_kvartir/

не будет работать

Даже если вы преобразуете urlencode или сохраните в utf-8

 

Могу порекомендовать

это сделать вставку в index.php и средствами php редиректить

Share this post


Link to post
Share on other sites

Увы...

Redirect 301 /Ремонт%20квартир/ http://my.su/remont_kvartir/

не будет работать

Даже если вы преобразуете urlencode или сохраните в utf-8

 

Могу порекомендовать

это сделать вставку в index.php и средствами php редиректить

А не подскажете, если не сложно, конечно,  пошагово, как переадресовать одну страницу на другую просто я не силен в php. Жаль что в .htaccess нельзя сделать(((

Share this post


Link to post
Share on other sites

header("HTTP/1.1 301 Moved Permanently");

header("Location: http://my.su/remont_kvartir/"); exit();

 

так в начале страницы прописываю в исходном коде - не получается

Share this post


Link to post
Share on other sites

Попробуйте

htaccess - кодировка utf-8 (без BOM)

СОДЕРЖАНИЕ:

Redirect 301 /Ремонт%20квартир/ http://my.su/remont_kvartir/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Share this post


Link to post
Share on other sites

header("HTTP/1.1 301 Moved Permanently");

header("Location: http://my.su/remont_kvartir/"); exit();

 

так в начале страницы прописываю в исходном коде - не получается

Так нельзя делать

if (isset($_GET['_route_'])) $route =urldecode($_GET['_route_']);
$redirect = array ('old_address' =>'new_addres');
if(isset($redirect[$route])){ header('Location: '.$redirect[$route],true); exit;}

Share this post


Link to post
Share on other sites

if (isset($_GET['_route_'])) $route =urldecode($_GET['_route_']);
$redirect = array ('old_address' =>'new_addres');
if(isset($redirect[$route])){ header('Location: '.$redirect[$route],true); exit;}

 

А так можно?

Share this post


Link to post
Share on other sites

конечно

в самое начало index.php

Share this post


Link to post
Share on other sites

К сожалению, не помогло ни так, ни так, что ж за бяда- то такая с этим редиректом, чтоб его!

Share this post


Link to post
Share on other sites

файл index.php сохранить в utf-8 без bom

Share this post


Link to post
Share on other sites

Не помогло вот содержание файла index.php

if (isset($_GET['_route_'])) $route =urldecode($_GET['_route_']);

$redirect = array ('http://annushka.su/Уборка%20квартир/' =>'http://annushka.su/uborka_kvartir/');

if(isset($redirect[$route])){ header('Location: '.$redirect[$route],true); exit;}

<?php

// Version

define('VERSION', '1.5.4.1');

// Configuration

require_once('config.php');

// Install

if (!defined('DIR_APPLICATION')) {

header('Location: install/index.php');

exit;

}

// VirtualQMOD

require_once('./vqmod/vqmod.php');

$vqmod = new VQMod();

// VQMODDED Startup

require_once($vqmod->modCheck(DIR_SYSTEM . 'startup.php'));

// Application Classes

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/customer.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/affiliate.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/currency.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/tax.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/weight.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/length.php'));

require_once($vqmod->modCheck(DIR_SYSTEM . 'library/cart.php'));

// Registry

$registry = new Registry();

// Loader

$loader = new Loader($registry);

$registry->set('load', $loader);

// Config

$config = new Config();

$registry->set('config', $config);

// Database

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

$registry->set('db', $db);

// Store

if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {

$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");

} else {

$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");

}

if ($store_query->num_rows) {

$config->set('config_store_id', $store_query->row['store_id']);

} else {

$config->set('config_store_id', 0);

}

// Settings

$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");

foreach ($query->rows as $setting) {

if (!$setting['serialized']) {

$config->set($setting['key'], $setting['value']);

} else {

$config->set($setting['key'], unserialize($setting['value']));

}

}

if (!$store_query->num_rows) {

$config->set('config_url', HTTP_SERVER);

$config->set('config_ssl', HTTPS_SERVER);

}

// Url

$url = new Url($config->get('config_url'), $config->get('config_use_ssl') ? $config->get('config_ssl') : $config->get('config_url'));

$registry->set('url', $url);

// Log

$log = new Log($config->get('config_error_filename'));

$registry->set('log', $log);

function error_handler($errno, $errstr, $errfile, $errline) {

global $log, $config;

switch ($errno) {

case E_NOTICE:

case E_USER_NOTICE:

$error = 'Notice';

break;

case E_WARNING:

case E_USER_WARNING:

$error = 'Warning';

break;

case E_ERROR:

case E_USER_ERROR:

$error = 'Fatal Error';

break;

default:

$error = 'Unknown';

break;

}

if ($config->get('config_error_display')) {

echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';

}

if ($config->get('config_error_log')) {

$log->write('PHP ' . $error . ': ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);

}

return true;

}

// Error Handler

set_error_handler('error_handler');

// Request

$request = new Request();

$registry->set('request', $request);

// Response

$response = new Response();

$response->addHeader('Content-Type: text/html; charset=utf-8');

$response->setCompression($config->get('config_compression'));

$registry->set('response', $response);

// Cache

$cache = new Cache();

$registry->set('cache', $cache);

// Session

$session = new Session();

$registry->set('session', $session);

// Language Detection

$languages = array();

$query = $db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'");

foreach ($query->rows as $result) {

$languages[$result['code']] = $result;

}

$detect = '';

if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && ($request->server['HTTP_ACCEPT_LANGUAGE'])) {

$browser_languages = explode(',', $request->server['HTTP_ACCEPT_LANGUAGE']);

foreach ($browser_languages as $browser_language) {

foreach ($languages as $key => $value) {

if ($value['status']) {

$locale = explode(',', $value['locale']);

if (in_array($browser_language, $locale)) {

$detect = $key;

}

}

}

}

}

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {

$code = $session->data['language'];

} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {

$code = $request->cookie['language'];

} elseif ($detect) {

$code = $detect;

} else {

$code = $config->get('config_language');

}

if (!isset($session->data['language']) || $session->data['language'] != $code) {

$session->data['language'] = $code;

}

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {

setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);

}

$config->set('config_language_id', $languages[$code]['language_id']);

$config->set('config_language', $languages[$code]['code']);

// Language

$language = new Language($languages[$code]['directory']);

$language->load($languages[$code]['filename']);

$registry->set('language', $language);

// Document

$registry->set('document', new Document());

// Customer

$registry->set('customer', new Customer($registry));

// Affiliate

$registry->set('affiliate', new Affiliate($registry));

if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {

setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/');

}

// Currency

$registry->set('currency', new Currency($registry));

// Tax

$registry->set('tax', new Tax($registry));

// Weight

$registry->set('weight', new Weight($registry));

// Length

$registry->set('length', new Length($registry));

// Cart

$registry->set('cart', new Cart($registry));

// Encryption

$registry->set('encryption', new Encryption($config->get('config_encryption')));

// Front Controller

$controller = new Front($registry);

// Maintenance Mode

$controller->addPreAction(new Action('common/maintenance'));

// SEO URL's

if (!$seo_type = $config->get('config_seo_url_type')) {

$seo_type = 'seo_url';

}

$controller->addPreAction(new Action('common/' . $seo_type));

// Router

if (isset($request->get['route'])) {

$action = new Action($request->get['route']);

} else {

$action = new Action('common/home');

}

// Dispatch

$controller->dispatch($action, new Action('error/not_found'));

// Output

$response->output();

?>

Share this post


Link to post
Share on other sites

Уборка%20квартир

%20 это лишнее - заменить на пробел

Share this post


Link to post
Share on other sites

1. все redirect`ы должны быть ПЕРЕД любыми rewrite-правилами.

2. есть версии apache, которые так или иначе не дружат с кириллицей.

3. кодировка .htaccess должна быть ПРАВИЛЬНОЙ (зависит и от кодировки сервера, и от кодировки сайта; в большинстве случаев - сейчас это utf8).

4. кириллический адрес, с которого должна быть переадресация, должен быть записан правильно ( http://otvety.google.ru/otvety/thread?tid=08d3a18f4d2a7cf3 - ответ от apple_rom)

5. если ничего не работает - тут есть пример "хака" на php: http://forum.searchengines.ru/showpost.php?p=11972460&postcount=9

Share this post


Link to post
Share on other sites

ничего не помогло,зато выяснил проблему:

Она залючается в пробеле т.к. /ремонтквартир/  - редирект выполняется, а /ремонт%20квартир/ - редирект не выполняется 

пробовал другие кодировки url типа /%D0%A3%D0%B1%D0%BE%D1%80%D0%BA%D0%B0%20%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B8%D1%80/

не прокатывает, странно

Share this post


Link to post
Share on other sites

Ответ тех поддержки хостинга

К сожалению, мы тут помочь не сможем - судя по всему, в реврайтах символ пробела указать нельзя. Не говоря уж о том, что кириллические символы в url - это в принципе плохой тон.

Share this post


Link to post
Share on other sites

можно

ремонт\ квартир

Share this post


Link to post
Share on other sites

Ошибка:

URL-путь имеет неверное значение

Share this post


Link to post
Share on other sites

Не поверите... Это просто, когда делаешь сам, но когда кто-то что делает, и просто говорит что не работает, и не показывает, что сделал, как сделал

Откуда сообщение

URL-путь имеет неверное значение

 

То - да - казалось бы так просто.

Share this post


Link to post
Share on other sites

Забудьте про пробелы, 

вот что в закладках первое нашел, почитайте про htaccess http://al.ndd.ru/12/apache-conf_access.html

 

Но редирект сделать можно через php, как точно не подскажу, 

Однако вот что мне в голову пришло...

На скольколько я помню, при большом объёме редиректов их можно запиливать в БД, а если у вас были ссылки кирилицей и с пробелами, значит БД их воспринимает нормально и они обрабатываются нормально. Значит можно сделать редирект если ссылаться на БД или же вовсе не используя .htaccess. Только для этого нужно писать скрипт php под ваш сайт который будет рскидывать редиректы по нужным страницам.

 

Например

 <?php
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: новый адрес");
      exit();
      ?>

------------или-------------------

<?

      $ref=$_SERVER['QUERY_STRING'];
      if ($ref!='') $ref='?'.$ref;
      header('HTTP/1.1 301 Moved Permanently');
      header('Location: новый адрес");
      exit();
      ?>

Share this post


Link to post
Share on other sites
Все прекрасно работает:

 

if ($_SERVER['REQUEST_URI'] == '/старый адрес') {

header('HTTP/1.1 301 Moved Permanently');

header('Location: /новый адрес');

exit; }

 

Вставляю в /catalog/view/theme/default/template/error/not_found.tpl вставляю в самое начало под тегом <?php

адреса пишем без домена, например site.ru/tovar.html то в записи должно быть /tovar.html

Страница обязательно должна быть недоступной, на крайний случай можно поставить этот код в хэадер.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By konorws
      300.00 руб
      Скачать/Купить дополнение


      Redirect Manager
      Redirect Manager - модуль который позволяет просто и быстро настроить редиректы (301, 302) на вашем сайте.
      Со временем все проекты развиваются и со временем стает вопрос с настройкой редиректо. Ксожелению стандарный функионал Opencart не предоставляет необходимого функционала. Да мы можем использовать  htaccess для этих целей но это жутко неудобно и тянет возможность поломки для сайта, ведь любая опечатка может привести к отключению всего сайта что крайне не желательно.
      Именно по этому наш модуль предоставляет вам удобство и простоту за минимальной стоимостью. 
       
      Добавил konorws Добавлено 13.05.2019 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика https://mirko.in.ua/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
    • By konorws
      Redirect Manager - модуль который позволяет просто и быстро настроить редиректы (301, 302) на вашем сайте.
      Со временем все проекты развиваются и со временем стает вопрос с настройкой редиректо. Ксожелению стандарный функионал Opencart не предоставляет необходимого функционала. Да мы можем использовать  htaccess для этих целей но это жутко неудобно и тянет возможность поломки для сайта, ведь любая опечатка может привести к отключению всего сайта что крайне не желательно.
      Именно по этому наш модуль предоставляет вам удобство и простоту за минимальной стоимостью. 
       
    • By Wacoola
      Всем привет!
      Нужна помощь... 
       
      ...элементарный редирект

      Redirect 301 /OLD/ /NEW/НЕ РАБОТАЕТ!выдает кусок старого адреса в конце:

      /cat_new/?_route_=/cat/(странность ещё и в том, что есть сайт на этом же хостинге на этом же движке, но там всё работает)Суть (задача)
      Были адреса продуктов:

      домен/кат1/продукт001.htmlСтали:
      домен/кат1_new/продукт001.htmlТребуется
      Redirect 301 /кат1/ /кат1_new/Исходные данные.htaccess
      ocStore Версия 1.5.5.1.2
      Тип ЧПУ: SEOPro
      окончания  .html
    • By dimastad
      Проблема:
      На сайте присутствуют незакрытые страницы фильтрации, которые в данный момент являются дублями родительских (основных) страниц категорий/подкатегорий.
      Пример:
      Например, страницы

      https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:5558-6867'>https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:5558-6867 https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793'>https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793являются дублями страницы категории
      https://coolstuff.com.ua/muzykalnoe-oborudovanie/Модуль – ocfilter (http://ocfilter.com)1. Для страниц категорий по маске

      http://coolstuff.com.ua/name-of-the-category/в связи с тем, что на данных страницах категорий отсутствует фильтрация, необходимопоставить 301 редирект со всех страниц по маске

      ?filter_ocfilter=на основную страницу категории во избежание формирования дублей.И заменить все ссылки отдающие 301 ответ сервера в исходном коде страниц сайта.
      Например, со страницы

      https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793'>https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793поставить 301 редирект на страницу
      https://coolstuff.com.ua/muzykalnoe-oborudovanie/После простановки редиректа заменить в исходном коде страниц ссылку
      https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793'>https://coolstuff.com.ua/muzykalnoe-oborudovanie/?filter_ocfilter=p:9484-10793на
      https://coolstuff.com.ua/muzykalnoe-oborudovanie/ 2. Для страниц подкатегорий по маске

      http://coolstuff.com.ua/name-of-the-category/name-of-the-subcategoryдля страниц с параметром
      ?filter_ocfilter=наладить генерацию мета-тега
      <meta name="robots" content="noindex, nofollow"/>Например, на странице
      https://coolstuff.com.ua/muzykalnoe-oborudovanie/akusticheskie-udarnye-ustanovki/?filter_ocfilter=p:46603-56572в коде страницы, в разделе <head></head> прописать мета-тег
      <meta name="robots" content="noindex, nofollow"/>Есть у кого идеи как это все сделать?
    • By moisey7
      Подскажите, пожалуйста, после изменения url страницы и переадресации на новый url уникальность текста остается или необходимо писать новый текст?
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.