Невозможно найти источник перезаписи - PullRequest
2 голосов
/ 29 марта 2019

Я пытаюсь настроить сервер apache с довольно сложными правилами htaccess. Я нашел различные решения для отдельных правил, однако, когда я пытаюсь собрать всю картину целиком, мне не хватает опыта работы с htaccess, и я испытываю некоторые странные изменения.

Правила:

  1. Корень содержит index.php, который запускает одностраничное приложение пользовательского интерфейса. Это означает, что URL должны быть переписаны в /index.php
  2. Есть несколько папок, которые должны быть исключены из Правила № 1, e. г. если к /admin обращаются, следует показать /admin/index.php, а не /index.php.
  3. Правило № 2 также применяется ко всем файлам на сервере (чтобы приложение пользовательского интерфейса могло загружать такие ресурсы, как js / css / etc.)
  4. Все 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, которое теперь портит мой кеш браузера. Однако странно, что даже если я установлю новый свежий браузер, проблема будет затронута. Даже если я попытаюсь получить к нему доступ со своего мобильного телефона (чего раньше никогда не делал, поэтому ничего не кэшируется), возникает та же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...