Условный параметр .htaccess RewriteRule

У меня довольно много RewriteRules в моем .htaccess, которые выглядят так

RewriteRule ^something/(\d+)/start    /index.php?ix=$1
RewriteRule ^embed/something/(\d+)/start    /index.php?ix=$1&fEmbed=1

Единственное различие между этими двумя - это ведущее «embed /», поэтому я подумал, что было бы полезно объединить их в одно RewriteRule. Мои попытки застряли на

RewriteRule ^(embed/)?something/(\d+)/start    /index.php?ix=$2&fEmbed=$1

Что устанавливает "& fEmbed = embed /", что на самом деле не то, что я хочу. Я хочу оценить содержимое $ 1 и вывести что-то другое (а именно «1»).

Есть идеи, как подойти к этому при объединении первых двух RewriteRule в одно RewriteRule?

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
1 991
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что должно быть два правила, но они не должны делать одно и то же. Следующее не проверено, но, надеюсь, намерения ясны, если это не работает "из коробки":

RewriteRule ^(embed/)?something/(\d+)/start$    /index.php?ix=$2
RewriteRule ^embed/(.*)    $1&fEmbed=1

Я предполагаю, что «/ start» всегда стоит в конце URL-адреса. Если нет, то это немного сложнее.

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

RewriteRule ^embed/(.*)    $1&fEmbed=1
RewriteRule ^something/(\d+)/start    /index.php?ix=$1

Но все же, будет это работать или нет, зависит от реальных приложений.

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

Vegard Larsen 23.12.2008 13:57

Работая с идеей PEZ, я пришел к следующему:

RewriteRule ^something/(\d+)/start(&fEmbed=1)?    /index.php?ixQuiz=$1&fStart=1$2
RewriteRule ^embed/(.*)                         $1&fEmbed=1

Не очень-то красиво, но работает. Теперь у меня может быть несколько правил, которые начинаются с «something /», и все они имеют префикс с помощью «embed /».

Другие вопросы по теме