Редикт, ещё одна тема

12
siv1987
На сайте с 02.04.2009
Offline
427
#11

Добавить после RewriteEngine On

RewriteRule ^[^/]+/\d+-([^/]+)/?$ /item/$1 [R=301,L]

GA
На сайте с 16.06.2013
Offline
61
#12
Moltisanti:
тьфу
RewriteRule ^[^/]+/\d+-(.*)$ /item/$1 [R=301]
попробуйте так
siv1987:
Добавить после RewriteEngine On

RewriteRule ^[^/]+/\d+-([^/]+)/?$ /item/$1 [R=301,L]

Оба варианта вроде пашут, в связи с чем у меня вопрос: чем они отличаются друг от друга и какой правильнее?

И есть ещё такой момент: после второго слеша убирается не только ИД-, но и все цифры, идущие до букв, т.е. если идёт так .../12-2-cars-in-1-garage , то редирект делает .../cars-in-1-garage , хотя название материала "2-cars-in-1-garage". Можно как-то задать удаление цифр и дефиса, а вот после дефиса не трогать?

siv1987
На сайте с 02.04.2009
Offline
427
#13
Green arrow:
т.е. если идёт так .../12-2-cars-in-1-garage , то редирект делает .../cars-in-1-garage

Этот выражение /\d+- делать такое не может.

/12-2-cars-in-1-garage => /2-cars-in-1-garage

GA
На сайте с 16.06.2013
Offline
61
#14
siv1987:
Этот выражение /\d+- делать такое не может.
/12-2-cars-in-1-garage => /2-cars-in-1-garage

не хочу с вами спорить, ибо спец тут вы, но я с практики говорю, вот сейчас тыкаю тыкаю и редирект убирает все цифры с дефисами до букв (

siv1987
На сайте с 02.04.2009
Offline
427
#15

Хотя да, при повторном редиректе выражение сработает снова, потому что урл /2-cars-in-1-garage соответствует условию /\d+-.

В таком случае заменить редирект на

RewriteRule ^(?!item/)[^/]+/\d+-([^/]+)/?$ /item/$1 [R=301,L]

GA
На сайте с 16.06.2013
Offline
61
#16
siv1987:
Хотя да, при повторном редиректе выражение сработает снова, потому что урл /2-cars-in-1-garage соответствует условию /\d+-.
В таком случае заменить редирект на
RewriteRule ^(?!item/)[^/]+/\d+-([^/]+)/?$ /item/$1 [R=301,L]

вот, так уже нормально) спасибо

а ещё, смотрите, вот есть такого вида редирект для категорий (таких 6 повторений):


function redirect301( $url ) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $url);
die();
}

$url = isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : $_SERVER['REQUEST_URI'];
if(strpos($url, '?')) $url = substr($url, 0, strpos($url, '?'));
$url = trim($url, '/');

if($url == 'partner')
redirect301('/partner2');
elseif($url == 'oldcat')
redirect301('/category/newcat');

он в индексном файле на пхп

вопросов несколько:

1. ваше правило может как-то помешать этим редиректам или вообще нарушить что-то на сайте?

2. код редиректа на пхп правильно написан?

3. может эти 6 редиректов тоже стоит перенести в htaccess? и как будет правильно выглядеть?

при пхп редиректе ответ сервера такой:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 29 Oct 2014 20:14:15 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.3.28
Location: /category/newcat

Он правильный или в Location должен быть полный адрес?

siv1987
На сайте с 02.04.2009
Offline
427
#17

1 не может

2 если работает значит написан правильно

3 может. только тут не 6 а 2.

GA
На сайте с 16.06.2013
Offline
61
#18
siv1987:
1 не может
2 если работает значит написан правильно
3 может. только тут не 6 а 2.

каждый блок

if($url == 'partner')

redirect301('/partner2');
elseif($url == 'oldcat')
redirect301('/category/newcat');

это 1 редирект, я просто привёл структуру без конкретных названий категорий

а как ложно выглядеть правило для htaccess?

siv1987
На сайте с 02.04.2009
Offline
427
#19
Green arrow:
каждый блок это 1 редирект

Если их посчитать то тут два блока. Не знаю, может быть в коде их 16.

Green arrow:
а как ложно выглядеть правило для htaccess?

RewriteRule ^partner$ /partner2 [R=301,L]

GA
На сайте с 16.06.2013
Offline
61
#20
siv1987:
Если их посчитать то тут два блока.

действительно, спасибо за замечание

12

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