2009-11-06 2 views
1

У меня довольно сложный набор правил перезаписи, чтобы дать моим страницам страницы довольно URL-адреса. Сейчас дело с подкачкой результатов поиска я использую 2 правила перезаписи:Mod Rewrite Необязательные параметры

RewriteRule ^search/([0-9]+)$ /cgi-bin/search.pl?page=$1 [NC,L,QSA] 
RewriteRule ^search$ /cgi-bin/search.pl [NC,L,QSA] 

Эти обработки URL-адреса, такие как:

http://example.com/search 
http://example.com/search/2 
http://example.com/search/1000 

Я задаюсь вопросом, как объединить их в 1 правила переписывания так что скрипт search.pl вызывается правильно и только передал параметр страницы, если указана страница. Я знаю, что это довольно простой вопрос, но я не могу найти ответ нигде. Спасибо за вашу помощь!

+0

Похоже, первые несколько ответов идут немного в неправильном направлении. Я думал больше о повторении регулярного выражения, чтобы параметры страницы были необязательными. Может быть, что-то вроде: RewriteRule^search (/ ([0-9] +))? $ /cgi-bin/search.pl?page=$1 [NC, L, QSA] Но он действительно должен работать. –

+0

@ Russell C .: Замените '$ 1' на' $ 2', так как вы хотите совпадение второй группы скобок. – Gumbo

+0

В URL-адрес внесены два отдельных изменения: (1) перейти в cgi-bin/search.pl и (2), если есть номер страницы, передать его как параметр. Логично, что это два RewriteRules. Почему вы хотите сделать это? –

ответ

1

Вы могли бы сделать что-то вроде этого:

RewriteCond page=$2 ^page=.+| 
RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?%0 [NC,L,QSA] 

Но это на самом деле не лучше, не так ли?


Редактировать Или, если вы хорошо с пустым значением страница:

RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?page=$2 [NC,L,QSA] 
+0

К сожалению, нет. –

+0

Это второй. Работает как шарм. Спасибо, Гумбо! –

+0

Спасибо @Gumbo, это было полезно для меня тоже! –

0

Вы: :: rewritemap с небольшим внешним скриптом, который не пуст до ?page=$1 и пуст для пустых. Я предлагаю придерживаться того, что у вас есть.