В чем разница между [R=301] и [R=301,L]?

может ли кто-нибудь поделиться со мной разницей между [R=301] и [R=301,L] в перенаправлении 301? Что лучше всего подходит для перенаправления URL-адресов?

хотя оба работают отлично, я заметил, что [R=301, L] изменяет URL на новый URL, а [R=301] только перенаправляет содержимое.

может ли кто-нибудь поделиться некоторым пониманием этого, пожалуйста?

3 ответов


независимо от R=301 здесь L флаг означает Last и должен быть помещен в правила, когда вы хотите пометить конец определенного правила перезаписи.

на официальный док:

флаг [L] заставляет mod_rewrite прекратить обработку набора правил. В большинстве случаев, это означает, что если правило совпадает, никаких дополнительных правил будет обработано. Это соответствует последней команде в Perl, или команда break В C. Использовать этот флаг указывает, что текущий правило должно применяться немедленно без рассмотрения дальнейших правил.


R делает перенаправление и L запрещает применять правила ниже. Если нет L затем правила rest будут применены к новому URL-адресу.

официальная документация говорит:

вы почти всегда захотите использовать [R] в сочетании с [L] (то есть использовать [R,L]), потому что сам по себе флаг [R http://thishost [: thisport] в URI, но затем передает это следующему правилу в наборе правил, что часто может привести к Предупреждения "недопустимый URI в запросе".


основное различие между флагами [L] и [R=301,L] заключается в том, что флаг R вызывает явное внешнее перенаправление HTTP (есть одно исключение), в то время как без флага R правило также может вызвать неявное внутреннее перенаправление, в зависимости от фактического правила и запроса.

необязательный код состояния просто указывает тип ответа перенаправления. 301 обозначает постоянное перенаправление: