Я изо всех сил пытаюсь показать ресурсы 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]