Vlad78 0 05/06/12 13:16 Здравствуйте уважаемые! Необходимо сделать переадресацию с использованием RewriteRule. Сейчас ссылка имеет вид http://site.ru/topic/123-text/ а ранее был мод ЧПУ и ссылка была http://site.ru/topic123.html Нужно чтобы при запросе старого адреса http://site.ru/topic123.html переадресовывало на новый http://site.ru/topic/123-text/. Я делал так, в файле .htaccess прописываю RewriteRule ^topic([0-9]+)\.html$ index.php?/topic/$1(-.*)&%{QUERY_STRING} Но такая конструкция выдает ошибку, помогите, пожалуйста, ее исправить. Поделиться сообщением Ссылка на сообщение
siv1987 2628 05/06/12 18:53 Такой редирект через htaccess не сделать, потому что какой там text неизвестен. В этом случае только через php, получить "text" и перенаправить на правильный урл. Можно в htaccess'е отловить старые ссылки и направить на свой файл обработчик. Поделиться сообщением Ссылка на сообщение
Vlad78 0 05/07/12 03:26 Я пробовал сделать ссылку http://site.ru/topic/123/ вместо http://site.ru/topic/123-text/ но у меня почему-то ссылка становится вида http://site.ru/topic/123-123 а не http://site.ru/topic/123. Подскажите как убрать второй id.И можно будет реализовать редирект с http://site.ru/topic123.html на http://site.ru/topic/123/ Будет этот код работать:RewriteRule ^topic([0-9]+)\.html$ index.php?/topic/$1%{QUERY_STRING} И еще может не по теме, но посоветуйте пожалуйста, как убрать этот index.php?. Дело в том, что у меня в .htaccess прописана переадресация RewriteRule ^topic,,,,,,,{QUERY_STRING} и теперь если я включаю "Использовать .htaccess mod_rewrite" и копирую код <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /site.ru/index.php [L] </IfModule>То выдается ошибка - нет такой папки site.ru/forum/2-forum/Вот код моего .htaccess со вставкой mod_rewriteRewriteEngine On RewriteRule ^index.htm index.php?%{QUERY_STRING} RewriteRule ^index.html index.php?%{QUERY_STRING} RewriteRule ^main.html index.php?act=idx&%{QUERY_STRING} RewriteRule ^ipb.html index.php?%{QUERY_STRING} RewriteRule ^topic([0-9]+)\.html$ index.php?showtopic=$1&%{QUERY_STRING} RewriteRule ^topic([0-9]+)s([0-9]+)\.html$ index.php?showtopic=$1&st=$2&%{QUERY_STRING} RewriteRule ^topic([0-9]+)\.html&st=([0-9]+)$ index.php?showtopic=$1&st=$2&%{QUERY_STRING} RewriteRule ^forum([0-9]+)\.html$ index.php?showforum=$1&%{QUERY_STRING} RewriteRule ^cat([0-9]+)\.html$ index.php?act=SC&c=$1&%{QUERY_STRING} RewriteRule ^ptopic([0-9]+)\.html$ index.php?act=Print&client=printer&f=1&t=$1&%{QUERY_STRING} RewriteRule ^user([0-9]+)\.html$ index.php?showuser=$1&%{QUERY_STRING} <IfModule mod_rewrite.c> RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /a2/index.php [L] </IfModule>Видимо они как то конфликтуют друг с другом. Подскажите, что здесь не так. Поделиться сообщением Ссылка на сообщение
siv1987 2628 05/07/12 07:32 Будет этот код работать:Не будет. Этот код немного для другого. Для редиректа будет так RewriteRule ^topic([0-9]+)\.html$ /topic/$1/ [R=301,L]И добавлять надо после Rrewriteengine On Дело в том, что у меня в .htaccess прописана переадресация RewriteRule ^topic,,,,,,,{QUERY_STRING}Не надо там никакой переадресации, в тройке уже другая система ЧПУ. Откуда это вы там нашли я не знаю. Оставьте только только реврайты форума, левые удалите. И еще может не по теме, но посоветуйте пожалуйста, как убрать этот index.php?Включите мод_реврайт. Поделиться сообщением Ссылка на сообщение
Vlad78 0 05/07/12 08:56 Не надо там никакой переадресации, в тройке уже другая система ЧПУ. Откуда это вы там нашли я не знаю. Оставьте только только реврайты форума, левые удалите.Если я удаляю из .htaccess кодRewriteEngine On RewriteRule ^index.htm index.php?%{QUERY_STRING} RewriteRule ^index.html index.php?%{QUERY_STRING} RewriteRule ^main.html index.php?act=idx&%{QUERY_STRING} RewriteRule ^ipb.html index.php?%{QUERY_STRING} RewriteRule ^topic([0-9]+)\.html$ index.php?showtopic=$1&%{QUERY_STRING} RewriteRule ^topic([0-9]+)s([0-9]+)\.html$ index.php?showtopic=$1&st=$2&%{QUERY_STRING} RewriteRule ^topic([0-9]+)\.html&st=([0-9]+)$ index.php?showtopic=$1&st=$2&%{QUERY_STRING} RewriteRule ^forum([0-9]+)\.html$ index.php?showforum=$1&%{QUERY_STRING} RewriteRule ^cat([0-9]+)\.html$ index.php?act=SC&c=$1&%{QUERY_STRING} RewriteRule ^ptopic([0-9]+)\.html$ index.php?act=Print&client=printer&f=1&t=$1&%{QUERY_STRING} RewriteRule ^user([0-9]+)\.html$ index.php?showuser=$1&%{QUERY_STRING} и включаю мод_реврайт, то у меня ссылки которые были ранее (site.ru/topic123.html) не работают, т.е. пишет что нет такой страницы. а мне очень нужно чтобы старые ссылки работали, т.к. они могут находиться у кого-то в закладках или ссылки из поисковой системы на проиндексированные страницы уже не будут работать. А если я оставляю этот код то старые ссылки переадресовываются на новый адрес и страница открывается, но мод_реврайт не работает. Как их соединить вместе, чтобы они не конфликтовали? Посоветуйте, пожалуйста, очень нужно. Поделиться сообщением Ссылка на сообщение
siv1987 2628 05/07/12 13:16 Без включения мод_реврайта работать не будет. То что у вас, если решили сменить тип ссылок, по хорошему надо убрать и сделать редирект на новые. Пример я вам показывал выше. А ваши реврайты из старой двойке, и судя по всему вы обновили двиг а как сохранить старые ссылки не знаете. Теперь у чпу есть свой шаблон который редактируется в файлах модулях. И это все обсуждалось здесь http://ipbskins.ru/forum/topic5970.html Не смысла держать два вида ссылок, либо оставляете старый формат, либо пишите редиректы на новые ссылки. Т.е. c урл /topic1.html пользователя переадресует на /topic/1/ Поделиться сообщением Ссылка на сообщение