Мод-переписать "Канонические URL" - PullRequest
2 голосов
/ 20 января 2012

Хай, как я могу создать канонические URL (для «разбора» в Facebook) с помощью mod_rewrite.

Пример: Я имею: example.com/index.php?page=eventdetails&id=241

Я бы сделал канонический URL, который должен выглядеть следующим образом:

example.com / eventdetails / 241 / некоторый текст, который будет игнорироваться из скрипта

Я проверил это на этом примере, но он не работает:

RewriteEngine on
RewriteRule ^/eventdetails/([0-9]+)/$ index.php?show=eventdetails&id=$1

Файл .htaccess находится в «домашнем» направлении.

Я не могу найти решения для точного примера @google, поэтому я надеюсь, что кто-то может мне помочь!

1 Ответ

7 голосов
/ 20 января 2012

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

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

...