Только знаешь в чем нюанс: сначала 301 редирект со старого адреса на новый на на без www, а от туда уже идет созданное в начале htaccess правило на 301 редирект на страницу уже с www.
Может и не страшно, просто интересно почему при такой же конструкции, которую ты мне помог сделать ранее идет перенаправление на сайт с www, а теперь с двумя переменными на сайт без www?
Не сможешь подсказать, может есть какие-то "подводные камни"?
---------- Добавлено 18.01.2013 в 22:53 ----------
НО! как сделать теперь редирект со старых адресов типа site.ru/articles.php?page=2 на site.ru/pisanina/page/2/, т.е. если где-то стоит ссылка на старый адрес и пользователь по ней перейдет, чтобы его переадресовало на новую страницу.
siv1987, РАБОТАЕТ! Проверил ответы сервера, все ок, 301 со старой на новую. На новой 200. Как положено!
Если можно, то вопросы как к знающему человеку:
1) Если у меня на сайте в нескольких скриптах используется GET переменная ID, то теперь я так понимаю со всех скриптов где в старом адресе будет переменная именно "ID" перекидывать по созданному редиректу? Не знаю правильно ли объяснил, но если не поймете, напишите пожалуйста, попробую объяснить.
2) Адрес вида site.ru/id/ работает, а site.ru/id - ошибка 404. Как считаете, влияет ли на SEO наличие слэша в конце адреса и как-то можно в регулярке прописать чтобы слэш в конкретном примере добавлялся (или наоборот убирался если он не нужен)?
Предположений нету, ну попробуйте заменить в редиректе относительные адреса на полные.
RewriteRule ^script\.php$ http://www.site.ru/avtozapchasti? [R=301,L]
...
RewriteRule ^script\.php$ http://www.site.ru/avtozapchasti/page/%1/? [R=301,L]
Да, прописал полные пути в htaccess, все встало на свои места.
---------- Добавлено 19.01.2013 в 16:27 ----------
siv1987, ОГРОМНОЕ ТЕБЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!
siv1987, Спасибо, сейчас попробую, отпишусь.
ivan-lev,
siv1987, спасибо!!!! Действительно работает!
Только знаешь в чем нюанс: сначала 301 редирект со старого адреса на новый на на без www, а от туда уже идет созданное в начале htaccess правило на 301 редирект на страницу уже с www.
Может и не страшно, просто интересно почему при такой же конструкции, которую ты мне помог сделать ранее идет перенаправление на сайт с www, а теперь с двумя переменными на сайт без www?
Не сможешь подсказать, может есть какие-то "подводные камни"?
---------- Добавлено 18.01.2013 в 22:53 ----------
Т.е. сейчас так:
Ответ сервера при вводе http://www.site.ru/script.php?cat=12 ==>> 301 на http://site.ru/tovary, т.е. без www в конечном адресе.
Ну и соответственно при вводе http://site.ru/tovary ==>> 301 на http://www.site.ru/tovary
---------- Добавлено 18.01.2013 в 22:55 ----------
Что не так, почему не идет перенаправление со старого адреса на новый но с www?
---------- Добавлено 18.01.2013 в 23:10 ----------
Вот весь Htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
ErrorDocument 404 /404.php
# Редирект 301 со старого адреса категории на новый и преобразование старого адреса категории на новый
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=1$
RewriteRule ^script\.php$ /avtozapchasti? [R=301,L]
RewriteRule ^avtozapchasti$ /script.php?cat=1 [L]
# редирект /script.php?cat=1&page=1 => /avtozapchasti/page/1/ и преобразование адреса с навигацией страниц
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=1&page=(\d+)
RewriteRule ^script\.php$ /avtozapchasti/page/%1/? [R=301,L]
RewriteRule ^avtozapchasti/page/(\d+)/$ /script.php?cat=1&page=$1 [L]
---------- Добавлено 19.01.2013 в 00:02 ----------
siv1987, есть предположения, почему так?
Добрый день!
siv1987, новая проблема со старым.... Как сделать то же самое что вы мне показали но когда в адресе 2 переменные? Вот пример:
Сделать реврайт и редирект 301 со старого адреса на новый,
если старый адрес:
site.ru/script.php?cat=12 нужно превратить в site.ru/tovary,
а затем site.ru/script.php?cat=12&page=5 в site.ru/tovary/page/5/
По аналогии с тем что вы показали делаю:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=12
RewriteRule ^script\.php$ /tovary? [R=301,L]
RewriteRule ^tovary$ /script.php?cat=12 [L]
Это работает.
А вот если добавляется переменная page, то не работает, делаю так:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=12&page=(\d+)
RewriteRule ^script\.php$ /tovary/page/%1/? [R=301,L]
RewriteRule ^tovary/page/(\d+)/$ /script.php?cat=12&page=$1 [L]
Подозреваю что неправильно делаю тут: RewriteCond %{QUERY_STRING} ^cat=12&page=(\d+)
Сможете подсказать, 2 переменные как подружить?
Заранее благодарю!
Ничего не понимаю, пробовал ведь так не один раз до этого...
РАБОТАЕТ!!!!!
siv1987, я вас очень благодарю!!!!!
siv1987, вы правильно меня поняли во всем, все работает, огромное спасибо.
Единственно что хотелось бы подшаманить это:
# Редирект 301 со старого адреса статьи на новый и преобразование старого адреса статьи на новый
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1/? [R=301,L]
RewriteRule ^(\d+)/$ /article.php?id=$1 [L]
То что приведено сверху прекрасно преобразовывает site.ru/article.php?id=2 в site.ru/2/
Как можно сделать чтобы в результате и преобразования и редиректа в итоге получалось site.ru/2 , т.е. без слэша в конце?
siv1987, спасибо за ответ!
Если делаю так:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1? [R=301,L]
RewriteRule ^([^/]*)$ /article.php?id=$1 [L]
чтобы адрес сатьи без слэша, то выходит ошибка 500.
Чувствую не правильно убрать слэш здесь: /%1? [R=301,L]
Список статей - articles.php
Сама статья - article.php
С остальным сейчас попробую...
siv1987, извини, а можно еще пару вопросов, а то совсем не могу сдружиться с этим делом:
1) Вот код который сейчас работает:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.ru/ [R=301,L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1/? [R=301,L]
RewriteRule ^([^/]*)/$ /article.php?id=$1 [L]
Т.е. что касается самих статей: было site.ru/article.php?id=N, стало site.ru/N/
Плюс работает 301 редирект со старых статей на новые.
Если я хочу сделать чтобы вид стал без слэша в конце, т.е. site.ru/N и убираю вот тут слэш:
^([^/]*)/$ делаю ^([^/]*)$, а в вашей строке с редиректом /%1/? делаю /%1? то не работает...
Если честно, то 3 ваших строки совсем не понимаю, отсюда и проблема. Подскажете где убрать в правилах слэш в конце?
2) Второй вопрос более сложный. Есть страница, которая выводит список статей: site.ru/articles.php
Нужно заменить ее на site.ru/pisanina
делаю так: RewriteRule ^pisanina$ /articles.php [L]
работает....
Теперь, по вашему примеру делаю 301 редирект:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^pisanina$
RewriteRule ^articles\.php$ [R=301,L]
не работает...
Но самая большая проблема - это что список сатей большой и появляется постраничная навигация:
http://www.site.ru/articles.php?page=2
Это нужно превратить в site.ru/pisanina/page/2/ и так далее.
Делаю так:
RewriteRule ^pisanina/page/([^/]*)/$ /articles.php?page=$1 [L]
работает...
НО! как сделать теперь редирект со старых адресов типа site.ru/articles.php?page=2 на site.ru/pisanina/page/2/, т.е. если где-то стоит ссылка на старый адрес и пользователь по ней перейдет, чтобы его переадресовало на новую страницу.
Очень-очень благодарю заранее!
siv1987, РАБОТАЕТ! Проверил ответы сервера, все ок, 301 со старой на новую. На новой 200. Как положено!
Если можно, то вопросы как к знающему человеку:
1) Если у меня на сайте в нескольких скриптах используется GET переменная ID, то теперь я так понимаю со всех скриптов где в старом адресе будет переменная именно "ID" перекидывать по созданному редиректу? Не знаю правильно ли объяснил, но если не поймете, напишите пожалуйста, попробую объяснить.
2) Адрес вида site.ru/id/ работает, а site.ru/id - ошибка 404. Как считаете, влияет ли на SEO наличие слэша в конце адреса и как-то можно в регулярке прописать чтобы слэш в конкретном примере добавлялся (или наоборот убирался если он не нужен)?
Очень-очень благодарю.
siv1987, не работает...