Я пытаюсь настроить сервер apache с довольно сложными правилами htaccess. Я нашел различные решения для отдельных правил, однако, когда я пытаюсь собрать всю картину целиком, мне не хватает опыта работы с htaccess, и я испытываю некоторые странные изменения.
Правила:
- Корень содержит
index.php
, который запускает одностраничное приложение пользовательского интерфейса. Это означает, что URL должны быть переписаны в /index.php
- Есть несколько папок, которые должны быть исключены из Правила № 1, e. г. если к
/admin
обращаются, следует показать /admin/index.php
, а не /index.php.
- Правило № 2 также применяется ко всем файлам на сервере (чтобы приложение пользовательского интерфейса могло загружать такие ресурсы, как js / css / etc.)
- Все
http://*
запросы должны быть перенаправлены на https://*
Некоторые, возможно, соответствующие детали:
- На сервере установлен SSL-сертификат LetsEncrypt. «Перенаправление с http» было включено во время установки, я подумал, что это могло создать некоторые странные правила перезаписи, поэтому я перешел к
etc/apache2/sites-available/lamp-server.conf
и прокомментировал эти три строки
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =[DOMAIN]
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Вот соответствующая часть /.htaccess
. В этом файле нет других переписываний / перенаправлений.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(wp|admin|phpmyadmin)(/.*)?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [QSA]
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
Когда я очищаю кеш в браузерах, он некоторое время работает правильно. Но когда я открываю часть сервера SPA (т. Е. Запускается первый RewriteRule), браузер кэширует какой-то вид перезаписи, а затем /admin
также начинает указывать на SPA, если я не выполняю Ctrl+F5
каждый раз.
Я пытался выполнить GET-запросы через Fiddler 4, там вроде все работает правильно. Пробовал эти сценарии:
- HTTP root - перенаправление 302.
- HTTPS root - 200 OK.
/search
Страница SPA - получено 200 OK с обработанным /index.php
в качестве ответа.
/admin
страница вне SPA - получено 200 OK с обработанным /admin/index.php
в качестве ответа.
Во время разработки правил htaccess, возможно, было время, когда выполнялось перенаправление 301, которое теперь портит мой кеш браузера. Однако странно, что даже если я установлю новый свежий браузер, проблема будет затронута. Даже если я попытаюсь получить к нему доступ со своего мобильного телефона (чего раньше никогда не делал, поэтому ничего не кэшируется), возникает та же проблема.