Перезапись не работает в файле.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>
Я нашел этого онлайн-тестера в этом посте: перенаправление, изменение URL-адресов или перенаправление HTTP на HTTPS в Apache - все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить
Ссылка на тестер: .htaccess tester
Когда я запустил свою конфигурацию, я получил следующую информацию об отладке для.htaccess
Мой вопрос:
- Как мне убедиться, что index.php не маршрутизируется неправильно, основываясь на выводе "отладочной информации для.htaccess"?
В выводе "отладочной информации для.htaccess" index.php добавляется к autodiscover.xml - это НЕ то, что мне нужно. - Что не так с моей конфигурацией, которая приводит к сбою в части Autodiscover? "Отладочная информация для.htaccess" гласит, что условие было выполнено только из-за "ИЛИ" в моей конфигурации.
Спасибо всем, кто видит это и предлагает любую помощь или объяснение!!:-)
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
один раз.Options
- Autodiscover
будет иметь синтаксическую ошибку, если есть такая функция сервера.