gormarket

gormarket
Рейтинг
47
Регистрация
29.12.2010

-L-, я бы на Вашем месте (когда нужно в любом случае прокрутить странцу, а на адреса нет возможности повлиять, как с поисковика например) добавил бы якорь на страницу, а для прокрутки добавил в конец странцы скрипт

document.location=document.location+"#bla-bla"

Не думаю что за это возможны какие-то санкции со сторони поисковиков.

-L-, добавьте в конец адреса страницы якорь, например "домен/страница.htm#bla-bla"

а в тот HTML-элемент (например div), который хотите отобразить в верхней части страницы после скроллинга, добавьте атрибут id="bla-bla"

И браузер сам прокрутит страницу после загрузки до этого дива.

У меня это реализовано на сайте в подписи (но только если у постетителя изначально отключены скрипты)

если на главной выбрать город, а потом на любой странице нажать ссылку "сменить город", то происходит переход на главную с прокруткой страницы до ранее выбранного города.

Palundra, посмотрите /ru/forum/613758

Там что-то похожее.


RewriteCond %{QUERY_STRING} ^b=1741$
RewriteRule ^forum/blog\.php$ http://%{HTTP_HOST}/forum/showthread.php?t=24296 [R=301,L]

Правильно будет так


RewriteCond %{QUERY_STRING} ^page_id=843$
RewriteRule ^$ http://%{HTTP_HOST}/passports-cottages.html? [R=301,L]

Но Вас вот это правило после редиректа на "passports-cottages.html" срабатывает:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^/index.php

RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]

RewriteRule (.*) index.php

и сбрасывает на морду.

Так что нужно не допустить до этого правила, и добавить следующий код перед ним


RewriteRule passports-cottages\.html$ - [L]
RewriteCond %{QUERY_STRING} ^page_id=843$
RewriteRule ^$ http://%{HTTP_HOST}/passports-cottages.html? [R=301,L]

вторая и третья строки делают нужный редирект, а первая строка делает выход их преобразований на следующем проходе (если редиркет уже сделан или обращение сразу идет по правильному адресу)


RewriteCond %{QUERY_STRING} ^category=.+$
RewriteRule ^$ http://%{HTTP_HOST}/index.php?%0 [R=301,L]

а если просто хотите избавиться от адресов с обращением к корню сайта (при любой строке запроса или при ее отсутствии) с 301 редиректом на index.php с той же строкой запроса, то нужна всего одна строка:


RewriteRule ^$ http://%{HTTP_HOST}/index.php [R=301,L]

strat0caster, здесь Вы не правы, пытаясь анализировать строку запроса (то что идет в адресе после ?) в правиле RewriteRule

RewriteRule работает только с той частью адреса, которая до "?"

Да еще и базовая часть в начале адреса отсекается (обычно "http:site.ru/" для htaccess в корне сайта, и "http:site.ru/folder/" для htaccess в каталоге первого уровня и т.д.)

Строку запроса надо анализировать в RewriteCond с помошью переменной %{QUERY_STRING}


RewriteCond %{QUERY_STRING} ^option=com_frontpage&Itemid=[0-9]+$
RewriteRule ^index.php$ http://www.site.ru/? [R=301,L]

А еще лучше вместо http://www.site.ru/ использовать http://%{HTTP_HOST}/

Упс!!!!!!

Забыл "?" добавить в RewriteRule ^index.php$ http://www.site.ru/? [R=301,L] чтоб строку запроса удалить при редиректе

Так что окончательный вариант такой


RewriteCond %{QUERY_STRING} ^option=com_frontpage&Itemid=[0-9]+$
RewriteRule ^index.php$ http://%{HTTP_HOST}/? [R=301,L]

похоже "\d" не срабатывает


RewriteRule ^(content/view/[0-9]+/)[0-9]+/$ /$1 [R=301,L]

zaka4ek, я извиняюсь за свою невнимательность (упустил один "+" после квадратных скобок)

то что я прелагал годится только для каталогов с именем из одного символа

вставьте сразу после

RewriteEngine On


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]
RewriteRule ^.*/[^./]+$ http://%{HTTP_HOST}/$0/ [R=301,L,E=RWR:yes]

и все должно заработать (редирект с калалога без слеша на то же самое со слешем)

пришлось добавить еще "http://%{HTTP_HOST}/", потому что иначе (без строки "RewriteBase /" как у Вас) может криво работать.

если htaccess пустой не забудьте перед строками с правилами преобразований добавить


RewriteEngine On
RewriteBase /
Всего: 437