Css / js не работает после добавления htacess

У меня есть файл .htaccess, и в нем есть скрипт:

<IfModule mod_rewrite.c>


Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^register/$ index.php?c=Page&a=register [L]


</IfModule>

в моем файле макета я загружаю css и js с абсолютным путем, например:

<link href = "/public/assets/bootstrap/dist/css/bootstrap.min.css" rel = "stylesheet">
<link href = "/public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel = "stylesheet">

и я получаю доступ к localhost/project/register/, но

файл css / js не загружается из-за ошибки:

GET http://localhost/public/assets/bootstrap/dist/css/bootstrap.min.css net::ERR_ABORTED

почему у него прямой доступ к /public после localhost? это должен быть localhost/project/public, а не localhost/public

если я удалю сначала / по ссылке css, он получит доступ к localhost/project/register/public

потому что мне нужно, чтобы каждая папка с активами основана на папке /project

Mamen 09.03.2018 19:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ваша ссылка css неверна. Он начинается с /public, что означает, что Apache попытается найти его в папке public в корне сайта.

Вам следует обновить свой путь на относительный:

<link href = "public/assets/bootstrap/dist/css/bootstrap.min.css" rel = "stylesheet">
<link href = "public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel = "stylesheet">

А затем добавьте это чуть ниже раздела <head> HTML-кода вашей страницы:

<base href = "/project/" />

так что каждый относительный URL разрешается из этого базового URL, а не из URL текущей страницы.

Альтернатива тегу <base ../> в HTML, вы можете использовать это правило перенаправления в своем .htaccess как самое первое правило:

RewriteRule ^public/.+\.(?:css|js)$ /project%{REQUEST_URI} [L,NC,NE,R=301]

Однако обратите внимание, что правило перенаправления (даже с R=301) по-прежнему заставляет нового клиента отправлять 2 запроса на ваш веб-сервер. Сначала с /public/... URI, а затем с /project/public/... URI после перенаправления.

вау, это работает, вы экономите мое время, но есть ли какое-нибудь решение с файлом htaccess и без базового тега? потому что я не хочу, чтобы его можно было редактировать при проверке элемента

Mamen 09.03.2018 19:44

Хорошо, я также добавлю решение .htaccess, но это более предпочтительное решение.

anubhava 09.03.2018 19:45

и еще одно, как определить project/public/ как общую папку в htaccess, поэтому мне просто нужно написать «assets / css file.css»

Mamen 09.03.2018 20:01

Просто измените указанное выше правило перенаправления на RewriteRule ^assets/.+\.(?:css|js)$ /project/public%{REQUEST_URI} [L,NC,NE,R=301].

anubhava 09.03.2018 20:02

Кажется, у вас есть два разных вопроса.

Что касается вашего вопроса, в показанном вами правиле .htaccess нет ничего, что могло бы изменить способ отображения существующего файла .css или .js. Итак, весьма вероятно, что либо ваши ссылки раньше не работали, либо у вас был другой контент в файле, чтобы переписать URL-адреса иначе, чем вы удалили. Этот файл просто заявляет, что если указан URL-адрес и нет файла или каталога, который ему соответствует, то перепишите URL-адрес для определенного URL-адреса. Это действительно кажется ошибкой, поскольку URL-адрес либо существует, либо нет.

Ваш второй вопрос касается URL-адресов и почему в них нет /project. Я не уверен, почему вы считаете, что в них должен быть /project, но я предполагаю, что вы предполагали это, потому что ваш исходный HTML-код находится в этом каталоге. Вы начинаете свою ссылку с /, как в /public/assets/bootstrap/dist/css/bootstrap.min.css". / означает, что путь является абсолютным, а не относительным, что означает, что путь начинается сразу после имени хоста. Если вы удалите исходный /, то путь будет относиться к URL-адресу, с которого он вызывается.

да, нет никаких правил для изменения существующего файла .css, потому что я этого не знаю, и я новичок в htaccess, и я прошу, какое правило может решить эту проблему, я имею в виду, какое правило объявить project - это базовый URL. поэтому мне не нужно использовать project/public для доступа к файлу .css

Mamen 09.03.2018 19:59

Если вы хотите загрузить эти файлы относительно корня домена, а каталог public не находится в корне домена, вам необходимо указать относительный путь домена полный:

<link href = "/project/public/assets/bootstrap/dist/css/bootstrap.min.css" rel = "stylesheet">
<link href = "/project/public/assets/bower_components/bootstrap-extension/css/bootstrap-extension.css" rel = "stylesheet">

Другие вопросы по теме