PowerPartners.ru

Форум партнерской программы
Текущее время: 21 ноя 2017, 16:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 13 сен 2017, 12:03 
Не в сети

Зарегистрирован: 11 сен 2017, 10:43
Сообщения: 1
И всё-таки, как правильно сделать обработку.
В документах http://powerpartners.ru/doc/mod_rewrite.htm
не нашел.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 13 сен 2017, 16:22 
Не в сети
Администратор

Зарегистрирован: 12 дек 2008, 01:50
Сообщения: 1422
Нет тут понятия правильно/неправильно. А есть "хочу чтоб работало так-то и так-то, подскажите как это реализовать". И чем точнее и подробнее будет изложена ваша задумка, тем точнее будет ответ. А на общие вопросы типа хочу ЧПУ, вы скорее всего получите пространственный ответ, а не инструкцию к реализации


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 11 окт 2017, 00:51 
Не в сети

Зарегистрирован: 11 окт 2017, 00:31
Сообщения: 5
Доброе время суток. Подскажите пожалуйста следующий момент... Вот я сделал ЧПУ по предложенному Вами образцу из .htaccess с сайта stabiltech.ru от 15 сентября 2010 года. Но страницы можно также открыть по старым адресам неЧПУ. Какая реакция будет у роботов ПС на дубли страниц? Я так понимаю, они (роботы) будут скачивать обе страницы, по старому адресу, и по ЧПУ-адресу? Не подскажете редирект с неЧПУ на ЧПУ адрес? Или может, неЧПУ адреса вида (например cat.php?cat=xxx) можно как-то поставить в Disallow в robots.txt?
СУВЖ, спасибо.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 11 окт 2017, 17:38 
Не в сети

Зарегистрирован: 22 апр 2013, 11:34
Сообщения: 314
Никаких редиректов с нечпу на чпу не существует. Если у Вас нет ссылок на нечпу, то робот и знать не будет об их существовании. Если же такие ссылки есть или сайт уже был проиндексирован с ними, то можно использовать мета-тэг canonical, для указания роботу на каноническую страницу.
В robots.txt можно закрыть от индексирования, только, насколько мне известно, регулярные выражения там не используются, придётся прописывать каждый адрес.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 11 окт 2017, 22:09 
Не в сети
Администратор

Зарегистрирован: 12 дек 2008, 01:50
Сообщения: 1422
Вообще говоря, ссылок на неЧПУ страницы быть не должно и поисковики вообще не должны о них знать и даже догадываться об их существовании.

Но, если неЧПУ страницы все же когда-либо где-либо "засветились", то для поисковиков будет достаточно прописать на страницах мета-тэг canonical со ссылкой на ЧПУ страницу.

Это самый простой и правильный способ (если говорим лишь о поисковиках), однако, может возникнуть необходимость скрыть партнерский движок, чтобы URL-ы стандартных страниц не открывались вообще, а были доступны лишь ЧПУ-шные URL-ы. Такое тоже возможно.

Разберем этот способ на примере страниц категорий, сейчас у нас категории открываются по URL /cat.php?cat=xxx. А надо сделать чтобы категории открывались о URL /cat-xxx.htm и при этом попытка открыть /cat.php?cat=xxx возвращала бы 404 (страница не существует).

Начинаем .htaccess стандартно:
Код:
AddDefaultCharset windows-1251

RewriteEngine on
Options +FollowSymlinks
RewriteBase /

Задали кодировку, включили mod_rewrite и опцию доступа к сим.линкам, а так же задали базу /, чтобы постоянно её в правилах не указывать.

Так и напрашивается решение:
Код:
RewriteRule ^cat-(.*)\.htm$ cat.php?cat=$1           # Подменить cat-xxx.htm на cat.php?cat=xxx
RewriteRule ^cat.php - [R=404]                      # Запретить доступ к cat.php

Но, оно не сработает, и вот почему: обработка правил mod_rewite происходит итерационно, в несколько проходов. На первом проходе запрос cat-xxx.htm преобразуется в cat.php?cat=xxx, и поскольку сработало хоть одно правило, будет запущен второй проход, снова по всему списку правил. И уже на втором проходе cat.php?cat=xxx будет преобразован в ошибку 404. Т.е. обращаясь по URL cat-xxx.htm мы получим ошибку 404. Это произойдет из-за того, что mod_rewrite делает несколько проходов по правилам.

Чтобы этого избежать и заставить все работать как надо - воспользуемся переменными окружениями, перепишем наше первое правило так:
Код:
RewriteRule ^cat-(.*)\.htm$ cat.php?cat=$1 [L,E=FLAG:1]

Оно преобразует запросы вида /cat-xxx.htm в /cat.php?cat=xxx. При этом, в квадратных скобках указаны дополнительные флаги: L - завершить текущий проход по списку правил mod_rewrite и приступить сразу к следующему проходу (это сэкономит время на обработку и убережет от возможного влияния правил, указанных дальше), а так же флаг E - установить значение переменной окружения FLAG в единицу.

Теперь, в следующем правиле, мы будем выдавать при обращении к /cat.php ошибку 404 лишь в том случае, если не была установлена переменная окружения FLAG, т.е. если это не второй проход по правилам, а действительно запрос к /cat.php. Для этого запишем правило используя RewriteCond:
Код:
RewriteCond %{ENV:REDIRECT_FLAG} ^$
RewriteRule ^cat.php$ - [L,R=404]


Особо отмечу что к названию переменной окружения добавляется префикс REDIRECT_, поэтому устанавливали мы FLAG, а проверяем REDIRECT_FLAG

Надеюсь объяснение получилось понятным. Для особо ленивых привожу весь .htaccess:
Код:
AddDefaultCharset windows-1251

RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteRule ^cat-(.*)\.htm$ cat.php?cat=$1 [QSA,L,E=FLAG:1]

RewriteCond %{ENV:REDIRECT_FLAG} ^$
RewriteRule ^cat.php$ - [L,R=404]


А так же напоминаю, что mod_rewrite правила в .htaccess лишь обрабатывают запрашиваемые URL, но не преобразуют ссылки href в html, так что для корректной работы ЧПУ сайта требуется не только прописать правила в .htaccess, но и заменить ссылки <a href="..."> в соответствующих tmpl-файлах каталога /theme/


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 11 окт 2017, 23:18 
Не в сети
Администратор

Зарегистрирован: 12 дек 2008, 01:50
Сообщения: 1422
Перечитал ветку и понял, что упустил из виду вопрос "редирект с неЧПУ на ЧПУ адрес"

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

Но, тем не менее, сделать это можно, вот пример:
Код:
AddDefaultCharset windows-1251

RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteCond "%{QUERY_STRING}" "cat=(.*)$"
RewriteRule ^cat\.php$ cat-%1.htm [QSD,L,R=301]

RewriteRule ^cat-(.*)\.htm$ cat.php?cat=$1 [QSA,L,E=FLAG:1]

RewriteCond %{ENV:REDIRECT_FLAG} ^$
RewriteRule ^cat.php(.*)$ - [L,R=404]


Только учтите, что флаг QSD работает лишь на Apache начиная с версии 2.4. На более ранних версиях - будет ошибка 500. Для версий <2.4 просто уберите этот флаг, будет небольшой косяк с параметрами после знака "?", но работать будет.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Использование ЧПУ (mod_rewrite)
СообщениеДобавлено: 13 окт 2017, 12:27 
Не в сети

Зарегистрирован: 11 окт 2017, 00:31
Сообщения: 5
Всем спасибо за ответы!


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB