Вопрос ньюба о .htaccess

nejronODP
На сайте с 05.02.2006
Offline
126
763

Нужно сделать 301 редиректы со страниц:

index.php?c_page=набор_цифрX (последняя цифра X, она м. б. = 1, 2, 3 или 4)

на страницы

index.php?c_page=набор_цифр0 (последняя цифра = 0)

Вариант:

RewriteRule ^/index\.php?c_page=(.*)[1234]$ /?index\.php?c_page=$1\0 [R=301,L]
не проходит.

Где я облажался?

Спасибо.

С уважением, Александр
D
На сайте с 14.01.2007
Offline
153
#1

попробуйте \? вместо ?

K
На сайте с 12.07.2006
Offline
295
Kpd
#2
nejronODP:
/?index\.php

знак ? тоже вызывает вопросы.

Shtogrin
На сайте с 02.11.2006
Offline
95
#3

RewriteCond %{QUERY_STRING} c_page\=([0-9]*)[1-4]+$

RewriteRule ^index.php(.*)$ /index.php?c_page=%1\0 [R=301,L]

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
nejronODP
На сайте с 05.02.2006
Offline
126
#4
Dinozavr:
попробуйте \? вместо ?

Не помогло.

Kpd:
знак ? тоже вызывает вопросы.

Без него тоже не работает. /? у меня служит для исключения возможности появления двойного слеша в конечном URL, например, site.ru//index.php

Shtogrin:
RewriteCond %{QUERY_STRING} c_page\=([0-9]*)[1-4]+$
RewriteRule ^index.php(.*)$ /index.php?c_page=%1\0 [R=301,L]

Работает! Спасибо большое.

nejronODP
На сайте с 05.02.2006
Offline
126
#5

В приведённом коде нужно заменить [1-4]+ на [1-4], т к. + здесь просто лишний, хотя и не влияет на поставленную задачу. Если будете решать по аналогии другую подобную задачу, то можете так и не догадаться, откуда у Вас вылезает ошибка, если не удалите +:

[1-4]+ — встречается любая из цифр 1,2,3,4 от 1 до N раз подряд, где N>1

[1-4] — встречается любая из цифр 1,2,3,4 только 1 раз

Нужно:

RewriteCond %{QUERY_STRING} c_page\=([0-9]*)[1-4]$

RewriteRule ^index.php(.*)$ /index.php?c_page=%1\0 [R=301,L]
Shtogrin
На сайте с 02.11.2006
Offline
95
#6

nejronODP, Да действительно "+" там лишний и "(.*)" во второй строке тоже лишнее.

nejronODP
На сайте с 05.02.2006
Offline
126
#7
Shtogrin:
nejronODP, Да действительно "+" там лишний и "(.*)" во второй строке тоже лишнее.

Да, Вы правы, в идеале нужно:

RewriteCond %{QUERY_STRING} c_page\=([0-9]*)[1-4]$

RewriteRule ^index.php$ /index.php?c_page=%1\0 [R=301,L]

Кстати, вот 2 перевода статей с английского — http://www.egoroff.spb.ru/portfolio/apache/. Это лучшие материалы в Рунете по модулю Apache mod_rewrite и URL преобразованиям, что я видел за последние 3 дня.

Вообще-то, мне не очень нравится, когда приходится разбираться в целом пласте материала с нуля из-за разовой задачи, которую, скорее всего, в будущем больше и не встретишь.

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