Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


ivanosovsky

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/
 
К сожалению этот Вариант не прокатил - никуда перенаправления не идет
Кто подскажет как реализовать, с утра бьюсь, думал все просто.???
Надіслати
Поділитися на інших сайтах


Увы...

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

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

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

 

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

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

Надіслати
Поділитися на інших сайтах

Увы...

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

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

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

 

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

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

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

Надіслати
Поділитися на інших сайтах


Попробуйте

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]
Надіслати
Поділитися на інших сайтах

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;}
Надіслати
Поділитися на інших сайтах

Не помогло вот содержание файла 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();

?>

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

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

Она залючается в пробеле т.к. /ремонтквартир/  - редирект выполняется, а /ремонт%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/

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

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


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

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

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

 

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

Надіслати
Поділитися на інших сайтах

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

вот что в закладках первое нашел, почитайте про 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();
      ?>

Надіслати
Поділитися на інших сайтах


  • 4 months later...
Все прекрасно работает:

 

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

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.