Назад | Перейти на главную страницу

Рекомендуемый htaccess разбивает весь статический контент

Я изо всех сил пытаюсь показать ресурсы CSS, IMG и JS моего сайта. У моего сайта такая структура:

root
   classes
   templates
   public
    images
    scripts
    styles
    index.php
   Procfile
   apache.conf

Теперь я знаю, что эта проблема вызвана перезаписью моего apache, потому что, когда я включаю их, мой PHP работает, а мои изображения - нет. Когда я их не включаю, мой PHP ломается из-за работы с активами. Странно подумал, что мне пришлось добавить косую черту перед моим правилом перезаписи, поскольку изначально рекомендованный index.php не работал и его пришлось изменить на /index.php

Мой файл Proc настраивается как общедоступный как root, и мои перезаписи выглядят так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]

С вышесказанным мой PHP-код работает нормально. Мой вопрос в том, как я могу получить его, чтобы результаты перезаписи не нарушили загрузку всех моих активов? Когда я просматриваю исходный код сайта, они находятся в нужном месте, просто я думаю, что их загрузка заблокирована.

В apache.conf перезаписывает apache, написанное выше

apache.conf вроде бы ваш "конфиг сервера". Когда директивы mod_rewrite используются в сервер контекст, в отличие от каталог (.htaccess), они работают по-другому и могут потребовать другого синтаксиса. Это объясняет, почему вам нужно было добавить к строке подстановки префикс косой черты, чтобы сделать ее относительной к DocumentRoot (без косой черты она рассматривается как относительная сервер корень).

Следовательно, REQUEST_FILENAME переменная сервера не может использоваться как есть в сервер context, поскольку запрос еще не отображен в файловую систему. REQUEST_FILENAME будет таким же, как REQUEST_URI и ваши проверки файловой системы не пройдут (в результате ваши статические ресурсы будут перезаписаны).

Чтобы получить окончательное значение REQUEST_FILENAME переменной в контексте сервера, вам необходимо использовать упреждающий просмотр на основе URL, т.е. %{LA-U:REQUEST_FILENAME}.

Вместо этого попробуйте следующее:

RewriteEngine On
RewriteCond %{LA-U:REQUEST_FILENAME} !-s
RewriteCond %{LA-U:REQUEST_FILENAME} !-l
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]