Page 1 of 5

Как сделать 301 редирект с index.php?page=name на name.htm ?

Posted: Sat Mar 19, 2011 2:55 am
by AKK
Добрый день.

Есть сайт на котором все ссылки были по умолчанию стандартного вида - /index.php?page=name - Все это дело проиндексировалось Яндексом и Гуглом и надежно сидит в индексе.

Теперь я решил изменить ссылки стандартного вида на вида ЧПУ - т.е. /name.htm

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

Подскажите, как сделать 301 редирект со страниц старого вида на новый?

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Thu Mar 24, 2011 2:14 pm
by mnk
Присоединяюсь к вопросу!

У меня ситуация немного иная, в индексе всё сидит уже в виде ЧПУ, но есть несколько неприятных моментов - cтраницы с изменённым алиасом и дубли (MLE по тегу {lang} выдаёт переключатель языков как ссылки вида site.com/ru/home вместо просто site.com)

Так вот, если делать редирект стандартным образом

Code: Select all

RedirectPermanent /razdel/OLD_ALIAS/  http://site.com/razdel/NEW_ALIAS/
то работает он некорректно, видимо, из-за mod_rewrite, который приводит ссылку к виду

Code: Select all

http://site.com/razdel/NEW_ALIAS/?page=razdel/OLD_ALIAS/&hl=ru
(редирект на обычные адреса без ЧПУ работает как полагается, но мне это не подходит)

Мануалы апача курил, ничего не дало, т.к. знания регулярных выражений, к сожалению, нет.

Пожалуйста, помогите каким-то образом совместить ЧПУ через mod_rewrite и 301е редиректы.

Условия и правила мод-рерайта прилагаю:

Code: Select all

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?page=$2&hl=$1 [qsa]

RewriteCond %{HTTP_HOST} ^www.sez-service.com
RewriteRule (.*) http://sez-service.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://sez-service.com/ [R=301,L]

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Thu Apr 26, 2012 4:29 pm
by swetcov
третьим буду!
может все таки кто нибудь поможет решить вопрос редиректа на этой системе?
как сделать редирект без дописки ?page=
например было сайт/about.php, стало сайт/o-kompanii.html
Redirect 301 /about.php http://www.сайт.ru/o-kompanii.html
получаем на выходе http://www.сайт.ru/o-kompanii.html?page=about.php

вариантов два- либо что не так в конфиге либо в строчке аксесса RewriteRule ^(.+)$ index.php?page=$1 [QSA]

----

Ведь не может такого быть, чтобы никто не делал редирект?!
и при этом, судя по всему, все кто делает, ни у кого не работает?

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Thu Apr 26, 2012 9:13 pm
by guro
Что бы редирект не дописывал ?page= в конце строки можете использовать следующий вариант:

#ловим url, с которого будем редиректить
RewriteCond %{REQUEST_URI} ^/index.php$
# с определенными параметрами ?page=name
RewriteCond %{QUERY_STRING} ^page=name$
# редиректим куда хотим
RewriteRule ^.*$ /name.htm? [R=301,L]

Если требуется более общий редирект, то можно вот так
RewriteRule ^comm/$ /objects/comm/? [R=301,L]
Редиректит все адреса имеющие урл имясайта/comm/ например:
имясайта/comm/?id=3
имясайта/comm/?com=2
на адрес имясайта/objects/comm/ без добавления переменных


Заметьте что в редиректе в конце стоит знак вопроса "?" - это нужно для того чтобы modrewrite не подставлял переменные

Ну и конечно это должно находиться раньше чем вот это
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?page=$2&hl=$1 [qsa]

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Fri Apr 27, 2012 11:12 am
by swetcov
в моем случае не работает.
простой вопрос- у меня десятки сайтов на разных цмс с разными конфигами и аксессами.
но везде работает простейшая запись
Redirect 301 /old-page.html http://new-domain.ru/new-page.html
при этом очистил .аксесс и ввел команды- редирект не работает.
то что я что то делаю не так для меня очевидно.
Но что я делаю не так?
как сделать так, чтобы
Redirect 301 /old-page.php http://new-domain.ru/new-page.html
не приводило к адресу
http://new-domain.ru/new-page.html?page=old-page.php
зачем он делает два действия?
1. добавляет ?page=
2. добавляет old-page.php. это вообще не понятно...
может ли кто попробовать редирект у себя- взять одну рабочую страницу и редиректнуть ее на другую рабочую? и рассказать про результат?

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Fri Apr 27, 2012 9:16 pm
by guro
На самом деле странно, что не работает.
Я привел примеры с рабочих сайтов и именно на cmsms

Не могли бы вы показать содержимое htaccess?
Сомневаюсь что там есть что-то секретное))

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sat Apr 28, 2012 9:05 am
by swetcov
привел исходник без вами рекомендованного кода, чтоб в первичном виде, так сказать.
Options -Indexes
#ServerSignature Off
#Options +FollowSymLinks
#
RewriteEngine on
RewriteCond %{HTTP_HOST} ^сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://www.сайт.ru/$1 [R=301,L]
Redirect permanent /about.php http://www.сайт.ru/o-kompanii.html
#
<IfModule mod_rewrite.c>
#Sub-dir e.g: /cmsms
RewriteBase /
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

код рекомендованный выше вставлял после редиректа с без ццц на ццц и потом строку редиректа.

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sat Apr 28, 2012 9:47 am
by guro
Сделайте вот так

Code: Select all

#Перенесем перед RewriteEngine on
<IfModule mod_rewrite.c>
RewriteEngine on
#Sub-dir e.g: /cmsms
RewriteBase /

RewriteCond %{HTTP_HOST} ^сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://www.сайт.ru/$1 [R=301,L]
# это
#Redirect permanent /about.php http://www.сайт.ru/o-kompanii.html
# меняем на это
RewriteRule ^about.php$ /o-kompanii.html? [R=301,L]
Вот так работает. Проверил лично))

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sat Apr 28, 2012 4:23 pm
by swetcov
работает и еще как)))
Спасибо!
---
яндекс поймет это за склейку?
ведь в правиле есть указание на 301.
то есть это работает как редирект пермамент?

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sat Apr 28, 2012 9:58 pm
by guro
swetcov wrote:яндекс поймет это за склейку?
ведь в правиле есть указание на 301.
то есть это работает как редирект пермамент?
Да, это обычный 301 редирект, т.е. страница перемещена навсегда и следует её заменить на таргетовую страницу

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sun Apr 29, 2012 9:28 am
by swetcov
вот ведь...
RewriteRule ^index.php?page=utilizatsiya-lamp$ /utilizatsiya.html? [R=301,L] не работает и
RewriteRule ^index.php$ /utilizatsiya.html? [R=301,L] тоже...

остались пять старых адресов
/index.php?page=utilizatsiya-lamp
/index.php?page=utilizatsiya-meditsinskih-othodov
/index.php?page=utilizatsiya-oborudovaniya
/index.php?page=utilizatsiya-orgtehniki
/index.php?page=utilizatsiya-zhidkih-othodov

хотел через самый удобный для меня вариант
RewriteRule ^index.php?page=utilizatsiya(.*)$ /utilizatsiya.html? [R=301,L]
но не работает... Хотя ведь вроде верно.
.- любой символ, *- любое количество раз, таким образом (.*) любая группа сиволов любое количество раз и $ закрываем строку.

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sun Apr 29, 2012 11:26 am
by guro
swetcov wrote:RewriteRule ^index.php?page=utilizatsiya(.*)$ /utilizatsiya.html? [R=301,L]но не работает... Хотя ведь вроде верно.
Нет не верно.
Начнем с того, что RewriteRule работает с регулярными выражениями, т.е. знак вопроса "?" для RewriteRule - это Квантор(символ для обозначения количественных отношений):
? - 0 или 1 из предшествующего текста.
Соответственно для того чтобы отловить знак вопроса - его нужно экранировать - \?. Но и так работать не будет, т.к. аргументы ссылки не попадают в RewriteRule
Но для вашего случая есть решение. Выглядит оно вот так:

Code: Select all

RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} ^page=utilizatsiya(.*)$
RewriteRule ^.*$ /utilizatsiya.html? [R=301,L]

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sun Nov 11, 2012 9:44 am
by artifakt
Здравствуйте, прошу помочь настроить редирект:

с _http://site.ru/index.php?page=name

на _http://site.ru/name

.htacess такой:

# Attempt to override some php settings, these settings may be helpful on some hosts if your
# default configuration does not meet CMS's minimum requirements, and your host
# has given your account appropriate permissions
#php_value upload_max_filesize "10M"
#php_value session_save_path "tmp/cache"

#php_flag magic_quotes_gpc Off
#php_flag register_globals Off
#php_flag session.use_trans_sid Off

# (this is important, so uncomment if your host permit)
#Options -Indexes
#ServerSignature Off
#
Options +FollowSymLinks
#
<IfModule mod_rewrite.c>

RewriteEngine on
#
#Sub-dir e.g: /cmsms
RewriteBase /



#
# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
#RewriteCond %{REQUEST_URI} !/$
#RewriteCond %{REQUEST_URI} !\.
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]


</IfModule>

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

Буду благодарен за любое содействие...

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sun Nov 11, 2012 11:50 am
by guro
В конфиге измените/вставьте строку

Code: Select all

$config['url_rewriting'] = 'mod_rewrite';

Re: Как сделать 301 редирект с index.php?page=name на name.h

Posted: Sun Nov 11, 2012 1:02 pm
by artifakt
К сожалению, изменений никаких, конфиг, отвечающий за урлы такой (урлы вида mysite.ru/name есть, но редиректа со старых не происходит):

#------------
#URL Settings
#------------

#What type of URL rewriting should we be using for pretty URLs? Valid options are:
#'none', 'internal', and 'mod_rewrite'. 'internal' will not work with IIS some CGI
#configurations. 'mod_rewrite' requires proper apache configuration, a valid
#.htaccess file and most likely {metadata} in your page templates. For more
#information, see:
#_http://wiki.cmsmadesimple.org/index.php/FAQ/Installation/Pretty_URLs#Pretty_URL.27s

$config['url_rewriting'] = 'mod_rewrite';

#Extension to use if you're using mod_rewrite for pretty URLs.
$config['page_extension'] = 'none';

#If you're using the internal pretty url mechanism or mod_rewrite, would you like to
#show urls in their hierarchy? (ex. _http://www.mysite.com/parent/parent/childpage)
$config['use_hierarchy'] = true;

#If using none of the above options, what should we be using for the query string
#variable? (ex. _http://www.mysite.com/index.php?page=somecontent)
$config['query_var'] = 'page';