Разрешение необязательных переменных с помощью Rewrite Cond - PullRequest
0 голосов
/ 18 июня 2010

В настоящее время у меня есть следующий код:

RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+) index.php?method=$1&value=$2 [NC,L]

Это прекрасно работает для перенаправления «page / home» на index.php? Method = page & value = home.Однако в некоторых моментах мне нужно добавить дополнительную переменную или две в строку запроса, например, «admin / useraccounts / mod / 2».Когда я просто добавляю биты к концу правила перезаписи, это работает, если все переменные - «page / home / rand / rand» или «admin / useraccounts / mod / 2», но если что-то отсутствует, например «page /home 'Я получаю 404.

Что я делаю не так?

Большое спасибо.

1 Ответ

0 голосов
/ 18 июня 2010

Это должно работать:

RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(?:/([a-z|0-9_&;=-]+))?(?:/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$3&opt2=$4 [NC,L]

(?:) не является группой захвата и? после того, как это делает его необязательным.

Я не уверен, работают ли группы без захвата в mod_rewrite, если не используют нормальные группы, просто позаботьтесь об использовании правильного числа после $ при извлечении значений. Как здесь:

RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(/([a-z|0-9_&;=-]+))?(/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$4&opt2=$6 [NC,L]

Группы нумеруются так, как если бы вы нумеровали их открывающие скобки слева направо, начиная с 1.

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