1

Тема: Переадресация страницы пагинации без слеша

Здравствуйте Александр и др.форумчане.
Сейчас занимаюсь оптимизацией своего сайта по вашим статьям из блога.Отдельная Вам благодарность за столь огромный,а главное полезный,труд.
В одной из статей по оптимизации вы показали как нужно делать редирект категории без слеша на категорию со слешем. А возможно сделать то же самое со страницами пагинации?

http://site.ru/page/номер страницы ----> http://site.ru/page/номер страницы/

Может я что-то пропустил и это уже обсуждалось? Спасибо....

Re: Переадресация страницы пагинации без слеша

youbus, Попробуй вот так, например:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.+)/page/1/?$ /$1/ [L,R=301]
RewriteRule ^(.+/page/\d+)$ /$1/ [L,R=301]

3

Re: Переадресация страницы пагинации без слеша

Нет,ничего не изменилось...Страница http://site.ru/page/12345 является дублем страницы http://site.ru/page/12345/ Может есть вариант с распилом двигла? Я полный ламер в этом,но прекрасно понимаю,что такого быть не должно...Просто сейчас разрешил индексацию страниц пагинации,кстати,использую ваш "правильный роботс для dle".

Извеняюзь за назойливость,но ещё кое-что обнаружил...

По вашим рекомендациям я оптимизировал заголовки,в т.ч. дескрипшн страниц пагинации,

но в каталоге /tags/ ,находясь на первой странице,-дескрипшн совпадает с главной и "стр.1" не подставляется.На остальных страницах всё отлично работает.В категориях вы решили эту проблему редиректом первой страницы на саму категорию.Для тегов так сделать нельзя т.к. попадёшь на все теги сайта....Возможно ли решение и этого вопроса?

Хоть и незначительные недочёты,но они меня ОЧЕНЬ раздажают.Я как и Вы не люблю всякие мелочи,которые могут со временем всплыть.Буду очень признателен вам за помощь.Да и ,возможно,обновите статьи по оптимизации своими решениями.

Спасибо...

Re: Переадресация страницы пагинации без слеша

youbus, Вот так еще попробуй:

RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)/page/([0-9]+)$ $1/page/$2/ [R=301,L]
RewriteRule ^(.*)page/([0-9]+)$ $1/page/$2/ [R=301,L]

Вообще-то должно работать все, у меня лично это на моих сайтах работает прекрасно!

5

Re: Переадресация страницы пагинации без слеша

Так тоже не работает....Думаю не стоит сильно заморачиваться.По крайней мере мне такие дубли не встречались...

6 (31.01.2013 12:57 отредактировано wovanich)

Re: Переадресация страницы пагинации без слеша

У меня на DLE 9.2 работает вот такой вариант:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteCond %{REQUEST_URI} !.xml$
RewriteRule (.+) $1/ [R=301,L]

Re: Переадресация страницы пагинации без слеша

wovanich пишет:

RewriteCond %{REQUEST_URI} !-f

Что это значит? smile Нет, я серьезно, я правда не понимаю, что это означает и вообще сомневаюсь в существовании такого правила...

8

Re: Переадресация страницы пагинации без слеша

Александр, а я не знаю smile. Я не кодер, когда то нашёл этот код на просторах интернета, работает, я и не заморачивался. Спасибо, что подсказал. Удалил это правило, ничего не изменилось, переадресация работает.

Попробовал твой первый вариант, он у меня не сработал. А вот,  второй работает нормально.

9

Re: Переадресация страницы пагинации без слеша

Алаичъ, я где-то читал, что правила, расписанные в файле .htaccess главной директории могут быть перевыполнены правилами .htaccess во внутренних директориях. Это правильно?
И ещё в своём посте про 301-й вы говорите, что так же важна последовательность выполнения этих правил. Вот мой .htaccess

+ открыть спойлер

<IfModule mod_expires.c>
    ExpiresActive on

    ExpiresDefault "access plus 1 month"

    # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
    ExpiresByType text/cache-manifest "access plus 0 seconds"

    # html
    ExpiresByType text/html "access plus 0 seconds"

    # XML
    ExpiresByType text/xml "access plus 0 seconds"
    ExpiresByType application/xml "access plus 0 seconds"

    # RSS
    ExpiresByType application/rss+xml "access plus 1 hour"

    # Favicon
    ExpiresByType image/x-icon "access plus 1 week"

    # Картинки
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"

    # HTC файлы  (например css3pie)
    ExpiresByType text/x-component "access plus 1 month"

    # Нестандартные шрифты сайта
    ExpiresByType application/x-font-ttf "access plus 1 month"
    ExpiresByType font/opentype "access plus 1 month"
    ExpiresByType application/x-font-woff "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

    # CSS и javascript
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"

</IfModule>

# Cache-Control браузера
<ifModule mod_headers.c>
    # 30 дней
    <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    # 30 дней
    <filesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    # 2 дня
    <filesMatch "\.(xml|txt)$">
    Header set Cache-Control "max-age=172800, public, must-revalidate"
    </filesMatch>
    # 1 день
    <filesMatch "\.(html|htm|php)$">
    Header set Cache-Control "max-age=172800, private, must-revalidate"
    </filesMatch>
</ifModule>

<IfModule mod_setenvif.c>
    #Эта конструкция для говнобраузера
    #Запрет отдачи HTTP-заголовков Vary
    BrowserMatch "MSIE" force-no-vary
    BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary
</IfModule>

DirectoryIndex index.php

RewriteEngine On
ErrorDocument 404 /error404.html


# Редиректы
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]
### START Редирект с первой страницы на основную
RewriteRule ^(.*)/page/1/$ $1/ [R=301,L]
RewriteRule ^(.*)page/1/$ $1/ [R=301,L]
### END Редирект с первой страницы на основную
RewriteCond %{REQUEST_URI} ^(.*)\&sa=
RewriteRule ^(.*)\&sa=(.*)$ $1 [R=301,L]
RewriteCond %{QUERY_STRING} ^utm_source= [NC]
RewriteRule (.*) $1? [R=301,L]
RewriteCond %{REQUEST_URI} !/$
# Сам пост
RewriteBase /
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*)\.(.*)$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]

RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$2 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$2&newsid=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/([0-9]+)-(.*)$ index.php?newsid=$2 [L]

RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$2&news_page=$1 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$1&newsid=$2 [L]
RewriteRule ^([0-9]+)-(.*)$ index.php?newsid=$1 [L]
# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь месяц
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вывод за весь год
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вывод отдельному тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
# поиск по доп полям
RewriteRule ^xfsearch/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^xfsearch/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
# вывод всех последних новостей
RewriteRule ^lastnews(/?)+$ index.php?do=lastnews [L]
RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
# вывод в виде каталога
RewriteRule ^catalog/([^/]*)/rss.xml$ engine/rss.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вывод непрочитанных статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# вывод избранных статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]

RewriteRule ^rules.html$ index.php?do=rules [L]
RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]

Последний, предложенный вами вариант у меня не работает, может нужно его ставить в определённое место? Не посмотрите?
И по вопросу папок, если это верное предположение, стоит ли редиректы как-то упорядочить? Или все сыпать в один файл? Спасибо...

Добавлено: 31.01.2013 16:47

По вопросу вложенных .htaccess я имею ввиду лучшую структурированность и последовательность выполнения действий роботом.

10

Re: Переадресация страницы пагинации без слеша

youbus пишет:

расписанные в файле .htaccess главной директории могут быть перевыполнены правилами .htaccess во внутренних директориях. Это правильно?

Вроде того, но, отвечая на следующий вопрос, лучше основные правила прописывать в основном же файле в корне папки домена. Во внутренних файлах .htaccess обычно прописывают запреты на доступ или что-то подобное.
Пример разных правил в разных папках, это поддомены. Данный форум расположен на поддомене talk.alaev.info, физически же файлы лежат в папке домена в папке /talk/ внутри которой свой .htaccess и свои правила.

youbus пишет:

Последний, предложенный вами вариант у меня не работает, может нужно его ставить в определённое место?

Обычно надо добавлять строки после первой записи RewriteEngine On.