Как сделать редирект (301, 302). Общая тема

stik.name
На сайте с 21.03.2010
Offline
80
#111

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

Вот попытка реализации, само собой не работает:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{THE_REQUEST} \?
RewriteCond %{REQUEST_URI} !.css$
RewriteCond %{REQUEST_URI} !.js$
RewriteRule ^(.*)$ http://%{HTTP_HOST} [R=301,L]

Условия при которых мы НЕ делаем редирект:

1. если файл из запроса действительно существует, например asdf.php или asdf.xml?asdsad и т.д. любое расширение

2. если урл вида /asd.css или /asd.css?fasf - не важно, существует этот файл или нет

3. если урл вида /asd.js или /asd.js?fasf - не важно, существует этот файл или нет

во всех остальных случаях редиректим на главную страницу сайта. Вот как ?

http://stik.name (http://stik.name) - Think different
D8
На сайте с 02.11.2014
Offline
13
#112

Использую конструкцию вида:

Redirect 301 /урл2/pages/id_12 http://сайт.ru/урл/

Редирект не срабатывае, а в адресной строке формируется такой урл:

http://сайт.ru/урл/?a=урл2/pages/id_12

Что может быть, уже перепробовал все конструкции рдиректа...

J
На сайте с 20.02.2014
Offline
120
jkm
#113
drema87:
Редирект не срабатывае, а в адресной строке формируется такой урл:
http://сайт.ru/урл/?a=урл2/pages/id_12

Но ведь там отчетливо видно, что редирект срабатывает.

В адресной строке как раз http://сайт.ru/урл/ только с добавлением лишних параметров "?a=урл2/pages/id_12".

Такое происходит при одновременной работе mod_alias и mod_rewrite.

Т.е. в правилах у вас как-то так


Redirect 301 /урл2/pages/id_12 http://сайт.ru/урл/

RewriteRule (.*) index.php?a=$1 [L]

К тому времени как mod_alias будет выполнять редирект на http://сайт.ru/урл/ mod_rewrite уже выполнит RewriteRule и допишет лишние параметры "?a=урл2/pages/id_12".

Поэтому тут лучше обойтись без mod_alias и делать редирект средствами mod_rewrite.


RewriteRule ^урл2/pages/id_12$ http://сайт.ru/урл/ [R=301,L]

Ну и ставить его выше других правил сразу после RewriteEngine On

D8
На сайте с 02.11.2014
Offline
13
#114
jkm:
Но ведь там отчетливо видно, что редирект срабатывает.
В адресной строке как раз http://сайт.ru/урл/ только с добавлением лишних параметров "?a=урл2/pages/id_12".
Такое происходит при одновременной работе mod_alias и mod_rewrite.
Т.е. в правилах у вас как-то так

Redirect 301 /урл2/pages/id_12 http://сайт.ru/урл/

RewriteRule (.*) index.php?a=$1 [L]

К тому времени как mod_alias будет выполнять редирект на http://сайт.ru/урл/ mod_rewrite уже выполнит RewriteRule и допишет лишние параметры "?a=урл2/pages/id_12".
Поэтому тут лучше обойтись без mod_alias и делать редирект средствами mod_rewrite.

RewriteRule ^урл2/pages/id_12$ http://сайт.ru/урл/ [R=301,L]


Ну и ставить его выше других правил сразу после RewriteEngine On

Спасибо большое! Все получилось.

Max_1
На сайте с 02.08.2012
Offline
45
#115
stik.name:
Вечер добрый, есть попытка написать редирект всех урл с ? на главную страницу сайта, но есть ньюансы.

Вот попытка реализации, само собой не работает:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \?
RewriteCond %{REQUEST_URI} !.css$
RewriteCond %{REQUEST_URI} !.js$
RewriteRule ^(.*)$ http://%{HTTP_HOST} [R=301,L]


Условия при которых мы НЕ делаем редирект:
1. если файл из запроса действительно существует, например asdf.php или asdf.xml?asdsad и т.д. любое расширение
2. если урл вида /asd.css или /asd.css?fasf - не важно, существует этот файл или нет
3. если урл вида /asd.js или /asd.js?fasf - не важно, существует этот файл или нет

во всех остальных случаях редиректим на главную страницу сайта. Вот как ?

Не трогаем всё, что содержит точку (в основном расширения).

RewriteCond %{THE_REQUEST} \?

RewriteCond %{REQUEST_URI} !\.

RewriteRule . /? [R=301,L]

Наполнение сайта (http://tino.ru/itm/1389070) / Управление ключевыми словами (http://tino.ru/itm/1733431) / Биржа труда (http://kwork.ru/?ref=9975)
GAMMA
На сайте с 27.12.2006
Offline
154
#116

Переношу сайт с одного движка на другой, очень много страниц в индексе. Хочу сделать 301 редирект с URL такого вида

/абракадабра.html на /news/read/абракадабра.html

То есть что бы при заходе на страницы по url с корня сайта посетитель, и поисковики соответственно, попадали на такие же страницы но уже в каталоге /news/read/

Прошу помочь кто знает как решить проблему.

Мой сервис блогов (http://mublog.ru) и личный блог (http://blogroot.ru)
Max_1
На сайте с 02.08.2012
Offline
45
#117

GAMMA, можно так.

RewriteRule ^([0-9a-zA-Z_-]+).html$ /news/read/$1.html [R=301,L]

GAMMA
На сайте с 27.12.2006
Offline
154
#118

Супер! Сработало! Как раз такой вариант я почему то не пробовал. Использовал только так RewriteRule ^(.*).html$ /news/read/$1.html [R=301,L]

idante
На сайте с 24.10.2012
Offline
70
#119

Есть сайт. Часть его находится в папке, эта часть на DLE. Как сделать редирект c www. на без www. внутри папки в таком случае

Стандартный вариант вида: RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

RewriteRule ^(.*)$ http:\/\/%1/$1 [R=301,QSA,L] не подходит (выбрасывает с /aaa/ на просто oplya.ru).

Цель: чтобы www.oplya.ru/aaa/ выдавал oplya.ru/aaa/)

WebAlt
На сайте с 02.12.2007
Offline
251
#120

В корне сайта:

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий