Lion_astana

Lion_astana
Рейтинг
53
Регистрация
22.12.2012
siv1987:
Предположений нету, ну попробуйте заменить в редиректе относительные адреса на полные.

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,

Видимо, потому что {ENV:REDIRECT_STATUS}
, что вы имеете ввиду?

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/

По аналогии с тем что вы показали делаю:

site.ru/script.php?cat=12 нужно превратить в site.ru/tovary,

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]

Кстати, проверьте имя файла, а то у вас не понятно, то ли это article.php то ли articles.php

Список статей - 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, не работает...

Всего: 84