Подпапка не загружает style.css

#php #.htaccess

#php #.htaccess

Вопрос:

У меня есть .htaccess файл, который перенаправляет все URL-запросы на мой index.php

 AcceptPathInfo On
RewriteEngine on
RewriteBase /Projects/tester/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
 

Внутри моего index.php У меня есть код, который включает URL-файл:

 <?php

if(isset($_GET['request'])){
    include('pages/'.$_GET['request'].'.php');
}else{
    echo 'index';
}

?>
 

Если мой URL-адрес — это localhost/Projects/tester/green мой индекс, он будет содержать файл с именем green.php , который существует внутри папки pages .

внутри pages/green.php У меня есть этот код:

 <link rel="stylesheet" type="text/css" href="style.css">
<div id="greenBox">
This box is green!
</div>
 

Когда я запускаю этот URL, я вижу большой зеленый div с текстом внутри.

Отлично, теперь давайте создадим папку с именем subs внутри папки pages и создадим файл с именем yellow.php

 <link rel="stylesheet" type="text/css" href="style.css">
<div id="yellowBox">
This box is yellow!
</div>
 

Когда я запускаю этот URL localhost/Projects/tester/sub/yellow , я вижу текст, но style.css не загружается (я не вижу желтый div).

Если все содержимое включено в index.php и style.css файл находится в той же папке, index.php что и, почему green.php можно загрузить style.css , но yellow.php нет?

Я вижу желтый div, только если добавляю ../style.css внутри yellow.php , но если это будет работать таким образом, я считаю, что мы должны использовать ../style.css на green.php в то время как в yellow.php использовать ../../style.css , нет?

Есть ли способ решить эту проблему? проблема в .htaccess?

Ответ №1:

Конечно, внешний браузер не понимает, где находятся ваши файлы на сервере, поэтому, если вы находитесь в следующей ситуации (с точки зрения браузера):

 http://localhost/Projects/tester/green
 -> hey browser, load "style.css"
 -> browser loads http://localhost/Projects/tester/style.css
 

Но если вы измените «виртуальный» путь:

 http://localhost/Projects/tester/sub/yellow
 -> hey browser, load "style.css"
 -> browser loads http://localhost/Projects/tester/sub/style.css
 

Итак, у вас есть три решения здесь, в порядке моих личных предпочтений:

1) Используйте абсолютные URL-адреса для загрузки данных css, необязательно используя PHP var:

 <link rel="stylesheet" type="text/css" href="/Projects/tester/style.css">
<link rel="stylesheet" type="text/css" href="<?php echo $base_path; ?>/style.css">
 

2) Используйте HTML-элемент <base> в head: (предупреждение: он применяется ко ВСЕМ относительным URL-адресам на странице: ссылкам, изображениям и т. Д.)

 <head>
  <base href="http://localhost/Projects/tester/" />
</head>
 

3) Если использование абсолютных URL-адресов не является вариантом, вы можете подсчитать, сколько «виртуальных подкаталогов» у вас отключено, и сгенерировать префикс, подобный этому:

 <?php
// first calculate $virtal_subdirs_number
$relative_urls = str_repeat("../", $virtual_subdirs_number);
?>
<link rel="stylesheet" type="text/css" href="<?php echo $relative_urls; ?>/style.css">
 

Ответ №2:

Это потому, что style.css находится в родительском каталоге yellow.php , Поэтому для доступа к файлу в родительском каталоге вы должны указать путь, например ../style.css, что означает поиск его в одном каталоге назад, а /style.css означает в текущем каталоге, который содержит yellow.php