- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день, подскажите как сделать редирект корневых запросов из подкаталога в корень сайта.
А именно:
У сайта есть подкаталог /shop
Нужно 2 запроса /shop и /shop/index.php перенаправлять на корень сайта. Любые другие запросы в подкаталог должны оставаться как есть. Любые запросы в корень сайта или другие подкаталоги тоже должны оставаться без изменений.
Сейчас в htaccess есть 2 правила:
# склейка зеркала
RewriteCond %{HTTP_HOST} !^www.mysite.com [NC]
RewriteRule ^(.*) http://www.mysite.com/$1 [L,R=301]
# редирект index.php на корень
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.mysite.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/dir/$1 [R=301,L]
У меня данное правило делает циклический редирект.
Т.е. независимо от того, куда я захожу: site.ru или site.ru/shop
я получаю http://site.ru/shop/shop/shop/.../shop/
Если 301 редирект
RewriteRule ^shop\/$ shop\/index.php [R=301,L]
RewriteRule ^shop\/index.php$ shop\/index.php [R=301,L]
или если не перенаправлять, а исполнять
RewriteRule ^shop\/$ shop\/index.php [L]
RewriteRule ^shop\/index.php$ shop\/index.php [L]
Надо еще добавить в начало RewriteBase /
У меня данное правило делает циклический редирект.
у меня там разные домены, поэтому нет такого... :)
Снова этот shop... После RewriteEngine
RewriteRule ^shop/(index.php)?$ / [R=301,L]
zhitov, слеш не является спец символом, его не надо экранировать, тем более в не regexp строке кой является substitution
Снова этот shop... После RewriteEngine
RewriteRule ^shop/(index.php)?$ / [R=301,L]
да, но при этом все адреса вида
http://site.com/shop/index.php?action=pages.getPage&Id=65
также редиректятся в корневой каталог
http://site.com/?action=pages.getPage&Id=65
Как избежать этого?
RewriteRule ^shop/(index.php)?$ /? [R=301,L]
Не, это не то.
Это вообще любые адреса в каталоге /shop, которые начинаются с index.php редиректит в корень.
Я неправильно объяснил.
Все адреса внутри раздела /shop должны остаться и обрабатываться как раньше.
Т.е. адреса вида http://site.com/shop/index.php?actio....getPage&Id=65
должны продолжать обрабатываться по этим адресам.
Аналогичные адреса в корневой директории также должны остаться. Т.е.
http://site.com/index.php?actio....getPage&Id=65 остается доступен в прежнем виде
И только
- /shop
- /shop/index.php
- index.php
должны редиректится на главную сайта, чтобы избежать дублей.
-----------------------
правило
RewriteRule ^shop/(index.php)?$ / [R=301,L]
делает то, что нужно, но дополнительно редиректит все index.php?actio....getPage&Id=65 в корень с сохранением всех параметров
RewriteRule ^shop/(index.php)?$ /? [R=301,L]
редиректит все подобные адреса на главную сайта
Про QUERY_STRING параметры надо было сразу сказать, и сказать это внятно.
Редиректить
- /shop/
- /shop/index.php
Не редиректить
- /shop/index.php?actio....getPage&Id=65
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^shop/(index.php)?$ /? [R=301,L]
Да, виноват.
Спасибо, все работает.