Попробуйте это:
RewriteEngine on
RewriteBase /
RewriteRule ^eventdetails/([0-9]+)/?$ index.php?show=eventdetails&id=$1 [L,NC]
RewriteRule ^eventdetails/([0-9]+)/([a-z0-9\-_]+)/?$ php.php?show=eventdetails&id=$1&name=$2 [L,NC]
/?
означает optinal /
в конце. Так что example.com/eventdetails/241/
и example.com/eventdetails/241
будут работать для этого правила. Первое будет использовать первое правило, только если имя события не используется.
И этот URL будет использовать второй (если имя события используется): example.com/eventdetails/241/event-name/
. Здесь я не рекомендую +
, поскольку он не очень оптимизирован для SEO, может быть, некоторые примут его, а некоторые нет. Я рекомендую -
вместо.
Я добавил L
на случай, если у вас есть другие правила, и флаг NC для не-регистра.
L: Флаг [L] заставляет mod_rewrite остановить обработку набора правил. В большинстве случаев это означает, что если правило соответствует, дальнейшие правила не будут обрабатываться. Это соответствует последней команде в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило должно применяться немедленно, без учета дальнейших правил.
NC : использование флага [NC] приводит к тому, что RewriteRule сопоставляется без учета регистра. То есть не имеет значения, отображаются ли буквы в верхнем или нижнем регистре в сопоставленном URI.
от: http://httpd.apache.org/docs/2.3/rewrite/flags.html