- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Делаю подмену по такому правилу:
Открываются страницы и newpage.html и page.php
Как сделать, чтобы открывалась только newpage.html, а при попадании на страницу page.php, был 301 редирект на newpage.html??
Смотрите RedirectPermanent (модуль mod_alias)
Если вариант, предложенный уважаемым Devider, окажется сложноватым, можно вставить в самое начало page.php примерно такой код:
wdsg, спасибо, код работает, а переправка происходит 301 редиректом?
Можно ли все таки узнать как можно реализовать в mod_rewrite?
peacedate, редирект в приведённом примере выполняется по 302. Для того, чтобы редирект был по 301 необходимо перед header('Location: newpage.html') отправить header('HTTP/1.0 301 Moved Permanently').
Разумеется, задача решаема и с помощью mod_rewrite. Выглядеть это будет примерно так:
RewriteRule ^newpage.html$ page.php [E=FLAG1:1,L]
RewriteCond %{ENV:REDIRECT_FLAG1} !1
RewriteRule ^page.php$ newpage.html [R=301]
wdsg, огромное спасибо, пойду пробовать. Только начал углубленно вникать в htaccess. Мож литературу подскажете, где вникнуть можно?
Почитайте это - ссылка.
RewriteRule ^page\.php$ /newpage\.html [R=301]
RewriteRule ^newpage\.html$ /page\.php [L]
Superior, спасибо за ссылку. Очень хороший материал.
allStars, писал это правило (точнее сам раньше составил) ...
RewriteRule ^newpage\.html$ /page\.php [L]
... не работает! Покраене мере у меня на локалхосте в опере.
Работает правило:
RewriteCond %{ENV:REDIRECT_FLAG1} !1
RewriteRule ^page.php$ newpage.html [R=301]
Помогите разобраться, что означает
и что за флаг [E=FLAG1:1]???
peacedate, конструкция
RewriteRule ^newpage\.html$ /page\.php [L]
не работоспособна изначально, так как содержит взаимоисключающие правила. При page.php мы редиректим на newpage.html, а при newpage.html заменяем его на page.php. Бесконечный цикл имеет место быть.
Для того, чтобы исключить зацикливание, мы, при замене newpage.html на page.php, будем писать в переменную окружения FLAG1 значение 1. Т.е. если окажется, что FLAG1 == 1, можно будет смело сказать, что URL уже гнутый. Установка переменной окружения производится так: [E=имя:значение]. Следовательно, в первой строке конструкции мы проверяем, соответствует ли запрос регулярке ^newpage\.html$. Если соответствует, загибаем на page.php и записываем 1 в FLAG1. Вторая строка является условием, определяющим содержится ли в переменной окружения FLAG1 значение 1. Для простоты восприятия "RewriteCond %{ENV:REDIRECT_FLAG1} !1" можно представить как "if (FLAG1 != 1) {". Третья строка "RewriteRule ^page.php$ newpage.html [R=301] " выполняет 301-ый редирект на newpage.html, если находит ^page\.php$. НО ТОЛЬКО ТОГДА, КОГДА FLAG1 НЕ РАВЕН 1. Т.е. второе правило (третья строка) будет иметь силу только если до этого не сработало первое (первая строка).
Кстати, точки в регулярках необходимо экранировать. Без экранирования они тоже, в принципе, годны, но имеют несколько иное значение. Отсутсвие обр. слешей в моём посте #5 - ошибка по невнимательности. Корректный код:
RewriteRule ^newpage\.html$ page.php [E=FLAG1:1,L]
RewriteCond %{ENV:REDIRECT_FLAG1} !1
RewriteRule ^page\.php$ newpage.html [R=301]
Чуть позже я отправлю Вам в ЛС ссылки на материалы относящиеся к mod_rewrite.
wdsg, СПАСИБО ОГРОМНОЕ за развернутый ответ. В принципе приблизительно так и предполагал, что так правило работает, но с Вашей помощи разобрался совсем. Пока только натыкался на литературу простенькую, где все только в кратце рассказывается. Про точки знаю, поэтому не обратил внимания, всегда их слешем обрабатываю.