У меня есть файл .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






Ваша ссылка 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 и без базового тега? потому что я не хочу, чтобы его можно было редактировать при проверке элемента
Хорошо, я также добавлю решение .htaccess, но это более предпочтительное решение.
и еще одно, как определить project/public/ как общую папку в htaccess, поэтому мне просто нужно написать «assets / css file.css»
Просто измените указанное выше правило перенаправления на RewriteRule ^assets/.+\.(?:css|js)$ /project/public%{REQUEST_URI} [L,NC,NE,R=301].
Кажется, у вас есть два разных вопроса.
Что касается вашего вопроса, в показанном вами правиле .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
Если вы хотите загрузить эти файлы относительно корня домена, а каталог 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">
потому что мне нужно, чтобы каждая папка с активами основана на папке
/project