#apache #.htaccess #url-rewriting
#apache #.htaccess #url-перезапись
Вопрос:
Я пытаюсь создать систему разбиения на страницы на своем веб-сайте.
Раньше у меня это было :
RewriteRule ^famille/([^/]*)-([^-]*).html$ /?fond=familleamp;id_rubrique=$1 [L]
И я мог бы перейти на свою страницу следующим образом :
http://blabla.net/famille/131-articles_de_cave.html
Итак, теперь я добавляю правило для разбиения на страницы :
RewriteRule ^famille/([^/]*)-([^-]*)-([^-]*).html$ /?fond=familleamp;id_rubrique=$1amp;page=$3 [L]
Если продолжить :
http://blabla.net/famille/131-articles_de_cave-2.html (для второй страницы) это работает.
Но если я на первой странице, я получаю ошибку 404 :
http://blabla.net/famille/131-articles_de_cave.html
Как решить эту проблему? (Мне нужно получить доступ к первой странице без указания номера страницы)
Ответ №1:
Вы используете оба правила или только одно?
Если вы используете оба правила в таком порядке:
RewriteRule ^famille/([^/]*)-([^-]*)-([^-]*).html$ /fond=familleamp;id_rubrique=$1amp;page=$3 [L]
RewriteRule ^famille/([^/]*)-([^-]*).html$ /fond=familleamp;id_rubrique=$1 [L]
тогда первая группа недостаточно эксклюзивна. Жадное совпадение будет соответствовать первому -
. Попробуйте это:
RewriteRule ^famille/([^-/]*)-([^-]*)-([^-]*).html$ /fond=familleamp;id_rubrique=$1amp;page=$3 [L]
RewriteRule ^famille/([^-/]*)-([^-]*).html$ /fond=familleamp;id_rubrique=$1 [L]
Или, может быть, просто поменять правила местами?
PS: Согласно http://www.w3.org/Provider/Style/URI возможно , вы захотите опустить .html
…
Комментарии:
1. Ах, просто скопируйте и вставьте это из моей тестовой настройки;)
Ответ №2:
Дефис перед номером страницы — ваша проблема. Сделайте это необязательным, попробуйте это:
RewriteRule ^famille/([^/]*)-([^-]*)-?([^-]*).html$ /?fond=familleamp;id_rubrique=$1amp;page=$3 [L]
Комментарии:
1. Кажется, это не работает. Если я пойду сюда: blabla.net/famille/131-articles_de_cave-2.html страница не находится в $_GET
2. Да, по причинам, объясненным @TobiX, второе совпадение «съедает» дефис, и номер страницы не заканчивается там, где ожидается. Извините за это, но я вижу, что ваша проблема решена.