Перезапись не работает в файле .htaccess

Обновление 26.06.18: Я понимаю, что это может быть дубликатом перенаправления, изменения URL-адресов или перенаправления HTTP на HTTPS в Apache - Все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить , тем не менее, я упомянул в своем исходном сообщении, что я был на этом посте и нашел сайт тестировщиков из этого сообщения. Я прочитал этот пост, и хотя я все еще новичок в переписывании правил, я не думаю, что это дублирование; однако я могу ошибаться.

Я пытаюсь установить новое правило перезаписи в моем файле .htaccess (ниже)

    SetEnv HTTPS on

<IfModule mod_rewrite.c>
    RewriteEngine On
Options -Indexes
    # Send would-be 404 requests to Craft
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
    RewriteRule (.+) index.php?p=$1 [QSA]
Options - Autodiscover
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} -s [OR]
   RewriteCond %{REQUEST_FILENAME} -l [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^.*$ - [NC,L]
   RewriteRule ^.*$ autodiscover.php [NC,L]
</IfModule>

Я нашел этот онлайн-тестер в этом сообщении: Redirect, Измените URL-адреса или перенаправьте HTTP на HTTPS в Apache - все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить

Ссылка на тестер: .htaccess tester

Когда я запустил свою конфигурацию, я получил следующий вывод отладочная информация для .htaccess

Мой вопрос:

  1. Как мне убедиться, что index.php не маршрутизируется неправильно на основе вывода ' отладочной информации для .htaccess '?
    В выводе «отладочной информации для .htaccess» index.php добавляется к autodiscover.xml - это НЕ то, что мне нужно.
  2. Что не так с моей конфигурацией, что вызывает ее сбой относительно части автообнаружения? В « отладочной информации для .htaccess » указано, что условие было выполнено только из-за «ИЛИ» в моей конфигурации.

Спасибо всем, кто видит это и предлагает любую помощь или объяснение! ! : -)

1
задан 26 June 2018 в 20:12
1 ответ

У последнего правила нет условий, поэтому оно используется всегда.

RewriteRule ^.*$ autodiscover.php [NC,L]

Директива RewriteCond определяет условие правила. Один или несколько RewriteCond могут предшествовать директиве RewriteRule . Следующее правило используется только в том случае, если текущее состояние URI совпадает с его шаблоном и если эти условия выполняются.

Следовательно, вместо этого все ваши условия связаны с предыдущим правилом:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

Также:

  • Вам потребуется RewriteEngine On только один раз.

  • Параметры - Автообнаружение будет иметь синтаксическую ошибку, ЕСЛИ такая функция сервера есть.

1
ответ дан 3 December 2019 в 23:15

Теги

Похожие вопросы