Правило перезаписи одного URL для 6 сценариев - PullRequest
4 голосов
/ 08 июня 2011

У меня есть правило перезаписи, которое работает для моей индексной страницы

RewriteRule ^index$ index.php [L]
RewriteRule ^index/$ index.php [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])$ index.php?recordstart=$1 [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])/$ index.php?recordstart=$1 [L]

У меня есть 6 страниц с похожим сценарием.

например.

RewriteRule ^graduate$ graduate.php [L]
RewriteRule ^graduate/$ graduate.php [L]
RewriteRule ^graduate/page/(0?[1-9]|1[0-2])$ graduate.php?recordstart=$1 [L]
RewriteRule ^graduate/page/(0?[1-9]|1[0-2])/$ graduate.php?recordstart=$1 [L]

Яищу переписать, который может соответствовать шести точным сценариям, вместо того, чтобы повторять четыре строки шесть раз.

Спасибо

Ответы [ 4 ]

2 голосов
/ 08 июня 2011

Во-первых, просто чтобы сэкономить место, вы можете сократить первые четыре правила до двух следующим образом:

RewriteRule ^index(/|)$ index.php [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])(/|)$ index.php?recordstart=$1 [L]

Затем вы можете изменить эти две строки следующим образом:

RewriteRule ^(page1|page2|page3|page4|page5|page6)(/|)$ $1.php [L]
RewriteRule ^(page1|page2|page3|page4|page5|page6)/page/(0?[1-9]|1[0-2])(/|)$ $1.php?recordstart=$1 [L]
2 голосов
/ 08 июня 2011
RewriteRule ^(index|graduate)/?$ $1.php [L]
RewriteRule ^(index|graduate)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]

| (pipe) используется в регулярных выражениях для предоставления альтернатив, фактически это означает «или». Вы можете добавить столько значений, сколько хотите, с помощью | s.

Если вы знаете, что делаете, вы также можете использовать ^([a-zA-Z]+)/?$, но это будет означать, что ваше правило фиксирует каждое значение, состоящее только из английских букв. Тогда вы должны обрабатывать ошибки.

Я упростил ваши правила, добавив в конце /?, что означает необязательный закрывающий слеш.

2 голосов
/ 08 июня 2011

Что-то вроде:

RewriteRule ^(scenario1|scenario2|scenario3)$ $1.php [L]
RewriteRule ^(scenario1|scenario2|scenario3)/$ $1.php [L]
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])$ $1.php?recordstart=$2 [L]
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/$ $1.php?recordstart=$2 [L]

Чувствуется грязно, но если вы хотите исключить все другие сценарии, кроме упомянутых.

РЕДАКТИРОВАТЬ : я добавлюздесь также можно удалить 2 строки правил, проверив / с ? после него, он будет совпадать с или без конечного /.Решение будет:

   RewriteRule ^(scenario1|scenario2|scenario3)/?$ $1.php [L]
   RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]
0 голосов
/ 08 июня 2011

Это работает (не проверено)?

RewriteRule ^(index|graduate|...)$ $1.php [L]
RewriteRule ^(index|graduate|...)/$ $1.php [L]
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])$ $1.php?recordstart=$2 [L]
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/$ $1.php?recordstart=$2 [L]

Я думаю, вы также можете свести правила к следующему:

RewriteRule ^(index|graduate|...)/?$ $1.php [L]
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...