Да, прописал полные пути в 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 %{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 %{QUERY_STRING} ^cat=12
RewriteRule ^script\.php$ /tovary? [R=301,L]
RewriteRule ^tovary$ /script.php?cat=12 [L]
Это работает.
А вот если добавляется переменная page, то не работает, делаю так:
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 %{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, спасибо за ответ!
Если делаю так:
RewriteRule ^article\.php$ /%1? [R=301,L]
RewriteRule ^([^/]*)$ /article.php?id=$1 [L]
чтобы адрес сатьи без слэша, то выходит ошибка 500.
Чувствую не правильно убрать слэш здесь: /%1? [R=301,L]
Список статей - articles.php
Сама статья - article.php
С остальным сейчас попробую...
siv1987, извини, а можно еще пару вопросов, а то совсем не могу сдружиться с этим делом:
1) Вот код который сейчас работает:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.ru/ [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 %{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, не работает...