Как работает RewriteRule? - PullRequest
       1

Как работает RewriteRule?

0 голосов
/ 18 августа 2010

Я просто не понимаю:

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteRule ^([a-z]+\-[0-9]+)/?$ $1/home/ [R]
RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1 [L]
RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301]

почему всегда обрабатывается последнее правило (и под последним я имею в виду перенаправление на anotherdomain.com)?.

Мне нужно что-то вроде этого:

http://mydomain.com/some-344 ---> http://mydomain.com/some-344/home/
http://mydomain.com/some-344/ ---> http://mydomain.com/some-344/home/
http://mydomain.com/some-344/home/ ---> home.php?id=344
http://mydomain.com/some-344/alone/ ---> alone.php?id=344
http://mydomain.com/anythingelse... --> http://www.anotherdomain.com/

спасибо!

1 Ответ

0 голосов
/ 18 августа 2010

Последнее правило всегда обрабатывается, потому что ^.*$ всегда будет совпадать.Хотя вы указали флаг L во втором правиле, он, вероятно, работает не совсем так, как вы ожидаете .

Также неплохо убедиться при перенаправлении налокальный путь, вы включаете косую черту, и при перенаправлении в целом вы указываете флаг L, чтобы перенаправление происходило немедленно.В настоящее время все работает хорошо, но если вы посмотрите на обработку, происходящую под капотом, она делает вещи немного более запутанно, чем необходимо.

Что касается вашей реальной проблемы, то вы можете подготовить всеобъемлющеередирект, основанный на исходном запросе к серверу, должен дать вам то, что вы хотели:

RewriteEngine on
RewriteBase /

RewriteRule ^([a-z]+\-[0-9]+)/?$ /$1/home/ [R,L]
RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1

RewriteCond %{THE_REQUEST} !^[A-Z]+\s/[a-z]+\-[0-9]+/(home|alone)/?
RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301,L]
...