У меня есть файл .htaccess:

Options +FollowSymLinks  
Options +Indexes  
RewriteEngine On

RewriteBase "/d/IT2 Tryggheim/it prosjekt 2011 - 2. termin/css/"
RewriteRule ^css/(.*\.(css|less))$ rewrite.php?file=$1 [NC]

А внутри папки css у меня есть файл rewrite.php, который выглядит так:

#$file = $_GET['file'];
$file = dirname($_SERVER['SCRIPT_FILENAME']) . '/' . $_GET['file'];

if(file_exists( $file ))
{
    $content = file_get_contents($file);
    # TODO: add code that parses the $content variable
    echo $content;
}
else
{
    echo "Weeeee! The file (<i>$file</i>) does not exist! :D <br /> <br />";
}

Все это проверено на Wampserver. Если я пойду по этому пути напрямую, он сработает:

http: //localhost/d/IT2%20Tryggheim/it%20prosjekt%202011%20-%202.%20termin/css/deafult.css

Однако, если у меня есть файл, один каталог вверх, в котором есть следующий HTML-код, он не работает:

<link rel="stylesheet" type="text/css" href="css/deafult.css" />

Или это не сработает, если я не отключу .htaccess, тогда он работает. Итак, как мне заставить php загрузить файл?

Альтернативы для $ file, которые я пробовал, но которые не работают

$file = dirname($_SERVER['SCRIPT_FILENAME']) . '/css/' . $_GET['file'];
$file = '/css/' . $_GET['file'];
$file = 'css/' . $_GET['file'];
$file = './css/' . $_GET['file'];

Другое, что я пробовал

  • Пробовал использовать include вместо file_get_contents
  • Пробовал жесткое кодирование в имени файла ('deafult.css') вместо использования переменной $ _GET
0
Knarf 14 Мар 2011 в 18:24
Вы делаете это излишне сложным. Почему бы тебе не записать исходную проблему? Вы можете получить простое решение.
 – 
vbence
14 Мар 2011 в 18:39
Исходная проблема: я хочу, чтобы файлы css и less анализировались файлом php. Меньшее количество файлов должно быть преобразовано в css. И css, и less должны быть сжаты. Также я мог бы захотеть заменить некоторые из переменных less внутри файла less другими значениями на основе некоторых пользовательских настроек (выбранных с помощью цветовой палитры, в которой пользователь хочет отображать веб-сторону).
 – 
Knarf
14 Мар 2011 в 19:22

3 ответа

Лучший ответ

Я добавил это в начало файла rewrite.php, и теперь он работает! : D

header('Content-type: text/css');
0
Knarf 14 Мар 2011 в 19:42

Ваша rewriterule зацикливается.

Поскольку вы передаете имя файла CSS в свой PHP-скрипт, вы получаете что-то вроде:

... / css / rewrite.php? file = test.css <- он снова соответствует вашему rewriterule.

Было бы проще, если бы вы удалили rewrite.php из папки css

1
Capsule 14 Мар 2011 в 18:40
Даже если я изменю правило перезаписи на: RewriteRule ^ css / (. *) \. (Css | less) $ rewrite.php? File = $ 1 [NC] И добавлю. '.css' в файл $ - не работает.
 – 
Knarf
14 Мар 2011 в 19:15

Скрипт PHP не получает каталог css, поэтому он ищет /default.css вместо /css/default.css ;-)

0
ChrisH 14 Мар 2011 в 18:29
$ file = dirname ($ _ SERVER ['SCRIPT_FILENAME']). '/ css /'. $ _GET ['файл'];
 – 
Knarf
14 Мар 2011 в 18:31
Вы на 100% уверены, что не допустили опечатки? localhost / d / IT2% 20Tryggheim /… <- deafult.css вместо default.css
 – 
ChrisH
14 Мар 2011 в 18:39
Что ж, deafult.css действительно опечатка, однако это опечатка, которая есть у меня как в имени файла css, так и в ссылке на файл css из HTML.
 – 
Knarf
14 Мар 2011 в 18:42
Вместо использования file_get_contents попробуйте include
 – 
ChrisH
14 Мар 2011 в 18:42