2012-01-18 2 views
0

Я использую HTAccess для управления дружественные URLsHtaccess домен 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/от просто^р.

Options +FollowSymlinks 
RewriteEngine on 

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

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

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

Заранее благодарю, как всегда.

+0

Первое правило перезаписывает yoururl.tld/p/1234/Name, а второе правило перезаписывает следующее: yoururl.tld/Something/p/1234/Name, но не yoururl.tld/Somethingp/1234/Name .. так что это это именно то, что вы описали. Скажи, если я ошибаюсь? – Fabian

+0

'^' означает начало URL-адреса. Поэтому перед «p/...» ничего не допускается. Поэтому 'example.com/gdp/12345/abc' никогда не будет соответствовать первому правилу. Просто попробуйте. Вы правы уже делает именно то, что вы хотите. – Gerben

ответ

0

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

  1. Вы не ссылочность правильный идентификатор: Первый() соответствует тому, что находится перед /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] 

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

+0

Спасибо, Джон. Вы правы, это был не-старт, потому что я забыл изменить $ 1 до $ 2. Тем не менее это не исправлялось до тех пор, пока не был отредактирован (^ | /) /, который я бы никогда не понял. Огромное спасибо! – Kevin

Смежные вопросы