Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2013, 10:33   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию .htaccess редирект на главное зеркало.

Добрый день, уважаемые форумчане.
Помогите в .htaccess настроить корректно редирект на главное зеркало.
Все как бы работает, но есть одно но!!! В url присутствует кирилица.

Само правило:
Код:
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Если пытаться зайти по такому адресу
Код:
http://www.site.ru/stranica.php?cat=Категория
Как видим в url присутствует кирилица в конце Категория, напрочь отказывается корректно обрабатываться данная страница.

Страница такого плана:
Код:
http://www.site.ru/stranica.php?id=1234
отрабатывается нормально.

Подскажите, как можно выкрутиться с данной проблемой, всем спасибо.
Небесный вне форума Ответить с цитированием
Старый 27.08.2013, 11:30   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Попробуйте
Цитата:
RewriteRule .? http://site.ru%{REQUEST_URI} [R=301,L]
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 27.08.2013, 12:02   #3
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Код:
RewriteRule .? http://site.ru%{REQUEST_URI} [R=301,L]
К сожалению не помогло.

Кодировка .htaccess 100% utf-8, кодировка сайта тоже таже.
В .htaccess прописал в начале AddDefaultCharset UTF-8.
Хотя последнее лишнее - в апаче и так стоит по умолчанию утф-8, ну такое на всяк случай.
Небесный вне форума Ответить с цитированием
Старый 27.08.2013, 21:06   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

У меня всё работает.
Вы либо неправильно обращаетесь к серверу (неправильно сформированый URI), либо неправильно парсите этот URI.

Покажите простейший пример вашего кода, который не может получить переменную cat из URI.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 27.08.2013, 23:30   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Код:
if (isset($_GET['cat'])){
    	$cat = mysql_real_escape_string($_GET['cat']);
    } else {
    	$cat = "";
    }
Небесный вне форума Ответить с цитированием
Старый 28.08.2013, 03:05   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Вы правы, не работает. Я проверял у себя неправильно. У меня редирект был на тот же хост. Поэтому всё работало.

По теме могу лишь подсказать флаг B для правила RewriteRule. Я не знаю на 100% как он используется, но в гугле есть пояснения как именно он может помочь.

http://httpd.apache.org/docs/current...gs.html#flag_b
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 02.09.2013, 19:04   #7
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
B (escape backreferences)

The [B] flag instructs RewriteRule to escape non-alphanumeric characters before applying the transformation.

mod_rewrite has to unescape URLs before mapping them, so backreferences are unescaped at the time they are applied. Using the B flag, non-alphanumeric characters in backreferences will be escaped. For example, consider the rule:

RewriteRule ^search/(.*)$ /search.php?term=$1
Given a search term of 'x & y/z', a browser will encode it as 'x%20%26%20y%2Fz', making the request 'search/x%20%26%20y%2Fz'. Without the B flag, this rewrite rule will map to 'search.php?term=x & y/z', which isn't a valid URL, and so would be encoded as search.php?term=x%20&y%2Fz=, which is not what was intended.

With the B flag set on this same rule, the parameters are re-encoded before being passed on to the output URL, resulting in a correct mapping to /search.php?term=x%20%26%20y%2Fz.

Note that you may also need to set AllowEncodedSlashes to On to get this particular example to work, as httpd does not allow encoded slashes in URLs, and returns a 404 if it sees one.

This escaping is particularly necessary in a proxy situation, when the backend may break if presented with an unescaped URL.
Как только я включаю опцию AllowEncodedSlashes On у меня и вовсе накривается все с кирилицей, сервер выдает ерор. (((
Это будет наукой, что нечего лезть со своей кирилицей. Но, проблему решать то нужно как-то. (((
Небесный вне форума Ответить с цитированием
Старый 03.09.2013, 12:54   #8
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Попробуй:
PHP код:
$cat iconv"windows-1251""utf-8"$_GET['cat'] );

$cat mysql_real_escape_string($cat); 
Mortimoro вне форума Ответить с цитированием
Старый 06.09.2013, 02:36   #9
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Mortimoro Посмотреть сообщение
Попробуй:
PHP код:
$cat iconv"windows-1251""utf-8"$_GET['cat'] );

$cat mysql_real_escape_string($cat); 
Тоже думал об этом, оно не помогает.
Код:
cat=Тест
Перекидает и делает ссылку такого вида
Код:
cat=%25D0%25A2%25D0%25B5%25D1%2581%25D1%2582
Небесный вне форума Ответить с цитированием
Старый 06.09.2013, 11:35   #10
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

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

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

Как вариант изврата: транслитерируем адрес на стороне сервера А, редиректим на сервер Б (можно отдельную точку входа сделать для этой цели), транслитерируем обратно и редиректим на основную точку входа уже внутри домена. Вместо транслитерации можно поиграться url_decode/url_encode, присваивать числовые либо символьные индексы, передавать url методом post и т.п.
Основная идея в том, что редиректа два - один межхостовый, второй внутрихостовый, где кириллицу проще обработать. Единственный плюс этого решения - русские буковки в строке адреса, да и то плюс сомнительный, ибо браузеры сейчас имеют тенденцию к тому, что в строке адреса отображается только доменная часть адреса и заголовок title.
Mortimoro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование .htaccess для DLE CMS, Редирект 301 Cone PHP 0 13.03.2013 12:23
.htaccess 301 редирект sanich_23 PHP 0 15.02.2013 09:46
Редирект через .htaccess creach PHP 0 21.08.2012 15:50
Не главное зеркало сайта feesta Помощь студентам 0 11.04.2011 19:48
Редирект через .htaccess AxisNet PHP 2 16.09.2009 18:34