Итак, у меня есть сайт, где я хочу такие страницы, как;
www.example.com/shop/index.php
(или любая другая страница в / shop / в этом отношении) теперь отображается как
www.example.com/index.php
но без фактического перемещения файлов, которые все еще находятся в / shop /, но теперь доступны через URL-адреса в /
Кажется, достаточно просто, и я могу сделать это самостоятельно, используя довольно стандартный RewriteRule. Второе требование заключается в том, чтобы ссылки на старый контент работали, поэтому я хочу сделать то же самое, но в другом направлении, но с использованием внешнего перенаправления 301 (без перезаписи), т.е.
www.example.com/shop/index.php
следует перенаправить на 301;
www.example.com/index.php
Опять же, достаточно просто само по себе. Но соедините их вместе, и вы получите прекрасную ошибку "Эта веб-страница имеет цикл перенаправления" при доступе к странице Однако я не понимаю, почему, поскольку одно правило является перезаписываемым, а другое - перенаправлением 301, и у них обоих есть флаг L, поэтому я подумал, что больше правил не обрабатывается. Итак, я нахожусь на пределе своего понимания этого материала mod_rewrite.
Чтобы проверить и не испортить мой сайт для посещающих людей, я использую каталоги / blob / и / b / с / b /, являющиеся каталогом new . Код, который у меня есть, дает цикл перенаправления:
RewriteRule ^blob/(.*)$ "http\:\/\/www\.example.com\/b\/$1" [R=301,NC,L]
RewriteRule ^b/(.*)$ /blob/$1 [NC,L]
Полагаю, это потому, что первое правило выполняется снова, как только второе, почему, если используется флаг 'L'? И какое условие я должен проверить или изменить, чтобы сделать так, чтобы правило перенаправления активировалось только в том случае, если исходный запрос предназначен для / blob / , а не переписанный URI.