В то время как все, что сказал @Corey Henderson, имеет абсолютный смысл ... это не на 100% соответствует реальности.
В вашем .htaccess есть только эти 2 правила (я знаю, это немного глупый пример, но в конечном итоге вы можете столкнуться с тем же эффектом при выполнении сложных переписываний):
RewriteEngine On
RewriteRule (.*) /index.php?u=$1 [L]
Можно подумать - перенаправить ВСЕ запросы на index.php
.Флаг [L]
установлен, поэтому не о чем беспокоиться.Что ж, по-видимому, есть о чем беспокоиться, так как после просмотра флага [L] mod_rewrite переходит на следующую итерацию (вход в цикл).Поскольку у нас есть правило, которое будет всегда выполняться, у нас будет бесконечный цикл (ну, в конфиге Apache есть настройка, которая управляет им - по умолчанию это максимум 10 итераций).Если предел превышен, вы увидите сообщение об ошибке 500 Server и эту строку в файле Apache error.log: "Запрос превысил предел 10 внутренних перенаправлений из-за возможной ошибки конфигурации. Используйте LimitInternalRecursion, чтобы увеличить предел при необходимости.Используйте 'LogLevel debug', чтобы получить обратную трассировку. "
Перезапись прекратится, если:
- Больше нет правил для обработки
- Внешнее перенаправление
[R=301]
- Дана явная команда «ничего не переписывать» (второй параметр
RewriteRule
- назначение должно быть -
. - При перезаписи на точно такой же URL, как и в начале итерации.
- Уже упоминалось "Запрос превысил предел внутренних перенаправлений xx".
Так что да ... чем быстрее будет перезаписана итерация перезаписи (правило сверху), тем лучшеis.
При заказе ваших правил (когда у вас их довольно много, а не только 1-2-3), вы можете рассмотреть эту логику (какие правила идут сверху):
- Правилоs для файлов / папок, которые вы не хотите трогать ВСЕ, ни при каких обстоятельствах (обрабатывать запрос как есть, независимо от домена / протокола)
- Правила, которые изменяют домен (например, перенаправление на
www.
)или протокол (форсирование HTTPS) - чем быстрее вы сделаете это, тем лучше (например, если вы сделаете это слишком поздно, он может уже изменить URL-адрес с «хорошего» на реальный). - Другие важные правила, которые могут повлиятьсуществующие файлы / папки
- (подумайте об этом) «нечего переписать» для существующих файлов / папок (см. ниже, вид № 1, но для всех существующих ресурсов)
- другие правила
- Поймать все правило.
На подавляющем большинстве сайтов, где переписывают URL, у вас не будет более 5-6 правил (файлы .htaccess по умолчанию для большинства PHP-фреймворков, которые я видел +)некоторые продукты, такие как WordPress, просто «ловят все» (если файл / папка не существует, то переписать запрос в index.php)).
У каждого веб-сайта будет своя логика, которая составляет приведенный выше список jПросто общая рекомендация, не более того.
# Do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]
Моя главная мысль здесь: Если у вас довольно много правил, подумайте над тем, чтобы вставить такой тип «ничего не переписывать»где-то там, чтобы полностью остановить итерацию.