Необязательные параметры RewriteRule - PullRequest
0 голосов
/ 11 января 2012

Как я могу объединить эти RewriteRules в одну строку, причем каждый параметр является необязательным?

RewriteRule ^(.*)/(.*)/(.*)/(.*)/ index.php?_page=$1&_sub=$2&_area=$3&_ex=$4 [NC,QSA,L]
RewriteRule ^(.*)/(.*)/(.*)/ index.php?_page=$1&_sub=$2&_area=$3 [NC,QSA,L]
RewriteRule ^(.*)/(.*)/ index.php?_page=$1&_sub=$2 [NC,QSA,L]
RewriteRule ^(.*)/ index.php?_page=$1 [NC,QSA,L]
RewriteRule ^ index.php [NC,QSA]

Я считаю, что .* автоматически требует следующий блок, в противном случае он тоже захвачен, так что вы можете заменить этос [^/]+ однако, когда я делаю это в одной строке (удаляя все, кроме первого правила), он перестает работать?

Ответы [ 2 ]

1 голос
/ 11 января 2012

Вы можете быть разочарованы, потому что нет решения того, о чем вы просите.

Более того, для каждого (n + 1) поддиректора имя переменной меняется ... так что решения определенно не существует.

В любом случае вы можете уменьшить ваши RewriteRules, используя такие вещи, как:

RewriteRule ^([^/]*)(/([^/]*))?/ index.php?_page=$1&_sub=$2 [NC,QSA,L]

, что делает второй аргумент пустым , но соответствует одному или двум аргументам .

0 голосов
/ 11 января 2012

Ваш rexexp ^app/?([\w]+)?/?([\w]+)?/?([\w]+)?/?((.*?)+)?$ семантически отличается от вашего начального каскада.

  • Откуда пришло приложение с дополнительным /?
  • Как вы хотите обрабатывать несловарные символы, такие как "."?
  • Нежадный оператор ([\ w] +) ? / избыточен
  • А как насчет дополнительных параметров псевдо-каталогов?

В любом случае в терминах регулярных выражений жадный ([^/]*) лучше, так как он будет правильно работать с /?.

RewriteRule ^([^/]*)/?^([^/]*)/?^([^/]*)/?^([^/]*)$ index.php?_page=$1&_sub=$2_area=$3&_ex=$4 [NC,QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...