Как описать этот URL в движке apache rewrite? - PullRequest
0 голосов
/ 03 марта 2011

Как бы вы написали регулярное выражение для включения такого вида URL:

page/(various-option)

, где various-option может быть что-то вроде:

page/gratis
page/gratis-images
page/weekly-images
page/yearly-images
page/yearly
page/images

(и все остальные комбинации параметров) В данный момент я использую что-то вроде этого:

RewriteRule ^page/((gratis)?\-?(weekly|yearly)?\-?(images)?)$ /page.php?options=$1 [L]

(Примечание: я пропустил другие параметры)

В переписывающем движке, который я написал, есть проблема, например, будет также проанализирован искаженный URL, например, такой:

page/-yearly-

Или еще хуже:

page/--images

Спасибо за любые предложения

ADD1:

weekly-gratis-weekly неверно и должно быть отказано.

Всего 5 параметров (но я не думаю, что регулярное выражение изменилось бы, если бы их было 3)

И все параметры можно комбинировать (кроме одного, например, еженедельно | раз в год)

ADD2 (@tim):

порядок параметров важен.

Это недопустимо page/images-yearly-gratis (но написанное мной регулярное выражение уже проверяет загрузчик) Правильный URL-адрес в этом случае

page/gratis-yearly-images

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Попробуйте

^page/((?:gratis(?=$|-.))?-?(?:(?:weekly|yearly)(?=$|-.))?-?(?:images)?)$

Объяснение:

^            # start
page/        # page/
(            # start capturing
 (?:gratis   # try matching "gratis"
  (?=$|-.)   # if it's the last item or followed by - and more characters
 )?          # optional match
 -?          # match a - if possible
 (?:         # the same with weekly|yearly
  (?:weekly|yearly)
  (?=$|-.)
 )?
 -?
 (?:images)? # finally, try matching images.
)            # end of capture
$            # end of string
0 голосов
/ 03 марта 2011
RewriteRule ^page/(((gratis)(-|$))?((weekly|yearly)(-|$))?(images)?)$ /page.php?options=$1 [L]

Также стоит упомянуть, что указанное выше правило работает только в файле .htaccess . Если вы хотите поместить его в файл конфигурации apache, шаблон должен начинаться с ^/page.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...