Htaccess URL переписать домен с подстановочным знаком - PullRequest
0 голосов
/ 18 января 2012

Я использую htaccess для управления дружественными URL-адресами

Мой удобный URL-адрес выглядит следующим образом:
www.example.com/p/12345/John-Smith

12345 - этоИдентификационный номер, / p / не меняется, и имя не имеет значения дружественного URL.Мой фоновый URL выглядит так:
www.example.com/page.php?id=12345

Мой htaccess выглядит так:

Options +FollowSymlinks
RewriteEngine on

RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^p/([0-9]+)/([^/\.]+)?$ details.php?id=$1 [L]

Все работает как шарм.

Однако то, что я действительно хочу, чтобы мой htaccess выглядел, - ниже.Единственное отличие - это ^ (. *) / P / против просто ^ p.

Options +FollowSymlinks
RewriteEngine on

RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^(.*)/p/([0-9]+)/([^/\.]+)?$ page.php?id=$1 [L]

По сути, я хочу убедиться, что только каталог / p / в URL-адресе запускает это конкретное правило htaccess, а не что-то непреднамеренное, например example.com/gdp/12345/abc

В жизни я не могу понять, почему это не работает!

Заранее спасибо, как всегда.

1 Ответ

0 голосов
/ 18 января 2012

Ваше правило RewriteRule ^(.*)/p/([0-9]+)/([^/\.]+)?$ page.php?id=$1 [L] имеет некоторые проблемы.

  1. Вы не ссылаетесь на правильный идентификатор: first () совпадает с тем, что находится перед /p/, поэтому $ 1 будет ссылаться на него, а не на идентификатор.
  2. URI, переданный черезпереписать правила, когда они есть, а в файле .htaccess начальный / удален, поэтому регулярное выражение ^(.*)/p/ будет никогда совпадать с чем-то вроде http://www.example.com/p/1234, потому что URI, передаваемый в правилоэто p/1234.
  3. Другая странная вещь в ваших правилах - вы перенаправляете все на http://www.example.com/, что выглядит как цикл перенаправления, но если это работает для вас, тогда это нормально.

Чтобы справиться с 1 и 2, вам нужно изменить обратную ссылку на $ 2 и указать регулярное выражение для p/1234 URI:

RewriteRule (^|/)p/([0-9]+)/([^/\.]+)?$ page.php?id=$2 [L]

The (^|/) говорит, что это либо начало URI (для p/1234), либо косая черта (для /something/p/1234).

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