+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
Применение нестандартного SEO и статус 404
несомненно, как для osCommerce так и для любого другого решения есть уже написанные и отработанные SEO модули, как например Ultimate SEO Urls(SUS). Они работают по тому принципу, что исходя из названия товара или заголовка страницы, формируется ссылка по заранее обговоренному шаблону и уже модулем mod_rewrite apache-а разбирается по скриптам. Однако в этом случае формируются хотя и удобночитаемые, но все таки с рудиментами ссылки - а иначе анализатор не сможет разобрать, где ссылка на товар, где на категорию или статью. Например для osCommerce и SUS5 файл .htacess может выглядеть например так:
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z0-9/-]+)-p-([0-9]+)$ product_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+)$ index.php [NC,L,QSA]
т.е. хорошо заметны элементы шаблонирования. Если от подобных шаблонов переходить к другому виду ссылок, более читаемых - то при переходе на такую ссылку как правило веб-сервер не находит файла (а его на самом деле и нет ссылка то это произвольный текст). В результате чего формируется 404 ошибка и как правило в лучшем случае может обрабатываться каким-то скриптом, прописанным в .htaccess, например ErrorDocument 404 /sus.php
Оно, конечно в этом скрипте можно сделать кульбит и таки отдать корректный материал, соответствующий ссылке - но тут нас подстерегает несколько неприятных моментов.
1. Уже сформирован код ошибки - а значит поисковые системы забывают об этой ссылке. С этим, в принципе можно бороться. Если у нас в качестве веб-сервера используется чистый apache - то достаточно перед страницей выпихнуть заголовок status, например так: header("Status: 200 OK"); А вот если у нас используется связка nginx-apache, то этого мало. Чтобы заставить nginx вместо 404 кода отдать 200 нужно в заголовки вписать нечто подобное: header("HTTP/1.0 200 OK");.
И вот у нас получает подмена кода 404 на 200 с выдачей страницы, как будто все нормально. Однако, не тут то было. и тут уже проблема 2
2. Как оказалось, если на скрипт передается управление описанным выше способом, то теряются параметры $_POST, $_GET, $_REQUEST. И если второй параметр еще можно восстановить из данных $_SERVER, то данные $_POST теряются безвозвратно. И вот тут уже приходится думать. Самый быстрый способ, чтобы в подобном случае передавать и данные и соблюсти правильные коды - переписать немного правила. Нужно добавить в конце всех правил такое:
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteRule "(.*)" "/sus.php?$1" [NC,L,QSA]
И вот мы перехватываем все ссылки не попавшие под шаблоны и не используем 404 код, а выдаем нормальный 200. Однако здесь маленькая, ну совсем маленькая неприятность... Х-мм, корень сайта может перестать открываться. т.е. например ссылка вида http://i-holder.net/ перестает работать из-за рекурсии. Но мы можем исправить и это. Поскольку обращение к корню сайта эквивалентно обращению к index.php(как правило), то добавляем в правила такое выражение:
RewriteRule ^$ index.php [NC,L,QSA]
Не красиво, зато работает. :)
напоследок привожу полный текст правил на примере osCommerce+ SUS5
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z0-9/-]+)-p-([0-9]+)$ product_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+)$ index.php [NC,L,QSA]
RewriteRule ^$ index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-m-([0-9]+)$ index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pi-([0-9]+)$ popup_image.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pr-([0-9]+)$ product_reviews.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pri-([0-9]+)$ product_reviews_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-t-([0-9_]+)$ articles.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-au-([0-9]+)$ articles.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-a-([0-9]+)$ article_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-i-([0-9]+)$ information.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-links-([0-9_]+)$ links.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-n-([0-9]+)$ newsdesk_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nc-([0-9]+)$ newsdesk_index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nri-([0-9]+)$ newsdesk_reviews_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nra-([0-9]+)$ newsdesk_reviews_article.php [NC,L,QSA]
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteRule "(.*)" "/sus.php?$1" [NC,L,QSA]
</IfModule>
Надеюсь, это сможет кому-то помочь.