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

Я изо всех сил пытаюсь показать ресурсы 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-код работает нормально. Мой вопрос в том, как я могу получить его, чтобы результаты перезаписи не нарушили загрузку всех моих активов? Когда я просматриваю исходный код сайта, они находятся в нужном месте, просто я думаю, что их загрузка заблокирована.

0
задан 7 January 2020 в 20:47
2 ответа

В 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]
1
ответ дан 7 January 2020 в 21:02

я знаю, что эта проблема вызывается моим апачем, переписывает, потому что

, Хотя базовая проблема состоит в том, что Вы, вероятно, используете родственник пути URL к Вашим статическим ресурсам (CSS, JS и изображения).

относительный путь URL к Вашему статическому ресурсу относительно Вашего "симпатичного" URL (это - клиентский ресурс), не файловая система сервера.

необходимо "прикрепить" относительные URL к статическим ресурсам, и любой делает их корневым родственником (запускающийся с наклонной черты) или абсолютный. С другой стороны, можно использовать base элемент HTML для установки пути URL, который все относительные URL относительно, однако, это не без его протестов.

Для получения дополнительной информации, см. этот связанный вопрос мой ответ ) на стеке Webmasters:

0
ответ дан 7 January 2020 в 22:50

Теги

Похожие вопросы