Как добавить правильное правило для перезаписи страницы в .htaccess?

#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, второе совпадение «съедает» дефис, и номер страницы не заканчивается там, где ожидается. Извините за это, но я вижу, что ваша проблема решена.