основной вопрос mod_rewrite / regexp: разделение идентификатора с тире - PullRequest
0 голосов
/ 11 ноября 2010

Я пытаюсь сделать некоторые перенаправления htaccess для более чистых URL, но мне не удалось это сделать.

Вот мое намерение:

/kitap/blah     => kitap.php?a=blah
/kitap/blah-123 => kitap.php?a=blah&b=123

Это мой текущий код.

RewriteRule ^(kitap|yazar)/?([^/\.]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$3 [QSA,L,NC]

В настоящее время он производит это:

/kitap/blah     => kitap.php?a=blah
/kitap/blah-123 => kitap.php?a=blah-123

Слово "бла" может включать символы Юникода, такие как ç, ö, ğ, ş и т. Д. (Это означает, что [a-z0-9_] не будет работать в моей ситуации)

Как мне достичь желаемого результата? Я пробовал разные вещи, но безуспешно. Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Я получил «гибридное» решение из комментариев Алины и Баттала.

RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]

И это работает.Спасибо!

0 голосов
/ 11 ноября 2010
RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]

или

RewriteRule ^(kitap|yazar)/?(\p{L}+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]

$4, а не $3, если вы не собираетесь использовать тире -, если вы используете $3, $_GET['b'] будет равно -123. Каждая пара парантезов считается, так что $3 равен -123, тогда как $4 равен 123.

\p означает символ Unicode, а {L} означает букву. Вы можете увидеть доступные модификаторы на PHP PCRE regex - Свойства символов Unicode . Чтобы использовать их, ваша версия PHP должна быть скомпилирована с --enable-unicode-properties.

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