Я изо всех сил пытаюсь показать ресурсы CSS, IMG и JS моего сайта. У моего веб-сайта такая структура:
root
classes
templates
public
images
scripts
styles
index.php
Procfile
apache.conf
Теперь я знаю, что эта проблема вызвана моим перезаписыванием apache, потому что, когда я их включаю, мой PHP работает, а изображения - нет. Когда я их не включаю, мой PHP ломается из-за работы с активами. Странно подумал, что мне пришлось добавить косую черту перед моим правилом перезаписи, поскольку изначально рекомендованный index.php не работал и его нужно было изменить на /index.php
. Мой файл Proc устанавливает public как корень, и мои перезаписи выглядят так:
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
не может использоваться как есть в контексте сервера, поскольку запрос еще не сопоставлен с файловой системой. 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]
я знаю, что эта проблема вызывается моим апачем, переписывает, потому что
, Хотя базовая проблема состоит в том, что Вы, вероятно, используете родственник пути URL к Вашим статическим ресурсам (CSS, JS и изображения).
относительный путь URL к Вашему статическому ресурсу относительно Вашего "симпатичного" URL (это - клиентский ресурс), не файловая система сервера.
необходимо "прикрепить" относительные URL к статическим ресурсам, и любой делает их корневым родственником (запускающийся с наклонной черты) или абсолютный. С другой стороны, можно использовать base
элемент HTML для установки пути URL, который все относительные URL относительно, однако, это не без его протестов.
Для получения дополнительной информации, см. этот связанный вопрос (и мой ответ ) на стеке Webmasters: