Как я могу установить необязательный параметр в Mod Rewrite-Syntax? - PullRequest
1 голос
/ 23 декабря 2009

Я немец, и мне жаль, что я чертовски сосу английский.

RewriteRule ^admin/(.*)$ index.php?admin=$1 

вот пример. поэтому я хочу получить, например, идентификатор внутри, но в качестве необязательного параметра:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2

Здесь идентификатор не должен устанавливать то, что я хочу:)

Пример ссылки (я хочу, чтобы здесь был тот же результат):

www.exmple.com/admin/edit-user
www.exmple.com/admin/edit-user/id-1

проблема в том, что правило всегда действует по первому пути:

RewriteRule ^admin/(.*)$ index.php?admin=$1 

Кто-нибудь может мне помочь? :)

любящий привет m0.

Ответы [ 4 ]

3 голосов
/ 23 декабря 2009

Попробуйте изменить порядок ваших правил и не забудьте флаг [L] в конце:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2 [L]

RewriteRule ^admin/(.*)$ index.php?admin=$1 [L]
2 голосов
/ 23 декабря 2009

Попробуйте опциональную группу захвата:

RewriteRule ^admin/([^/]*)(/id-(.*))?$ index.php?admin=$1&id=$3

Если идентификатор не указан, то $ 3 будет пустым, и вы получите просто переписанный пустой идентификатор:

index.php?admin=edit_user&id=

Если указано, то вы также получите идентификатор:

index.php?admin=edit_user&id=1
1 голос
/ 23 декабря 2009

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

Итак, попробуйте эти правила:

RewriteRule ^admin/([^/]+)$ index.php?admin=$1
RewriteRule ^admin/([^/]+)/id-([^/]+)$ index.php?admin=$1&id=$2

Для второго правила вы также можете заменить второе [^/]+ на [1-9][0-9]*, которое будет соответствовать только целым числам больше 0.

RewriteRule ^admin/([^/]+)/id-([1-9][0-9]*)$ index.php?admin=$1&id=$2
0 голосов
/ 23 декабря 2009

попробуйте это:

RewriteRule /admin/([^/]*)/?(id-(.*))?$ index.php?admin=$1&id=$3
...