Стили CSS исчезают, если я ввожу аргумент после index.php - PullRequest
3 голосов
/ 14 февраля 2012

Мои стили CSS перестают работать, если я ввожу какой-либо аргумент после моей целевой страницы index.php

Я добавляю / тестирую новый код на своем локальном сервере разработки под управлением xampp, кодирую в php / javascript / html / css. РЕДАКТИРОВАТЬ: мой сервер разработки Windows Vista, и я сейчас использую Firefox версии 10.0.1.

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

Модуль mod_rewrite, который я разрабатывал, позволяет пользователю указывать текстовую строку после имени сайта, например:

     http://www.mysite.com/Stonehenge-artifact1

и мой mod_rewrite обрабатывает этот аргумент и делает что-то значимое - в частности, он перенаправляет из моей целевой страницы index.php на совершенно другую страницу, на которой отображается фотография Стоунхенджа-артефакта1.

Проблема - если пользователь вводит www.mysite.com/index.php/ialkselasdfa все мои стили CSS исчезают - специальные шрифты и цвета целевой страницы index.php в моей таблице стилей CSS пропадают.

Я отменил все свои изменения в mod_rewrite, включая полное удаление моего пользовательского файла .htaccess в пространстве папок mysite.com (использование локальной пользовательской копии .htaccess - один из шагов для mod_rewrite).

Я хотел посмотреть, исчезнут ли стили CSS теперь, когда я вернулся к вчерашнему (до изменений mod_rewrite) коду. Конечно же, моя таблица стилей CSS выходит из самоволки, если я наберу аргумент, ЛЮБОЙ аргумент после index.php.

Так что следующие URL (например) как-то отключают мою таблицу стилей CSS для index.php

www.mysite/index.php/foo
www.mysite/index.php/css-whereAreYou

(ПРИМЕЧАНИЕ: причина, по которой я поднял mod_rewrite, заключается в том, чтобы объяснить, почему я вначале что-то печатаю в конце URL-адреса моего сайта. Если бы я не тестировал этот новый код mod_rewrite, я бы не нашел эта проблема.)

Вот мое включение в index.php моей таблицы стилей CSS:

<html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <link rel="stylesheet" type="text/css" href="globalStyles.css" />
 </head>

Мой globalStyles.css:

root { 
  display: block;
}

body
{
   color: black;
   font-family: Gill, Helvetica, sans-serif;
   font-size: 9pt;
   background-color: RGB(243,239,240); /* light blue */
} 

p
{
    color: black;    
}

Почему моя целевая страница index.php не получает стили CSS, когда я добавляю символы после index.php?

Ответы [ 4 ]

4 голосов
/ 14 февраля 2012

Вы также можете использовать тег <base> в разделе заголовка:

<base href="base/path/for/files/to/follow">

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

Я столкнулся с той же проблемой с mod_rewrite (и, хотите верьте, хотите нет, это решение появилось в поиске Google, хотя мне пришлось немного покопаться).

3 голосов
/ 14 февраля 2012

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

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

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

Например: /index.php/foo на самом деле index.php будет обрабатываться как каталог , а затем foo как подкаталог index.php, в результате чего браузер пытается найти ваш файл CSS по адресу: /index.php/foo/globalStyles.css.

2 голосов
/ 14 февраля 2012

Внутри следующей страницы:

www.mysite/index.php/foo

следующий тег:

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

инструктирует браузер искать файл с именем:

www.mysite/index.php/globalStyles.css

Очевидно, его там нет. Вы должны использовать абсолютные пути в вашем случае:

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

Обратите внимание, что это может привести к другой проблеме: запрос браузера на:

www.mysite/globalStyles.css

может быть преобразован / перенаправлен mod_rewrite в:

www.mysite/index.php/globalStyles.css

Вам следует настроить правила перезаписи, чтобы игнорировать файлы .css, .js, .gif (и т. Д.). В качестве альтернативы, используйте флаг RewriteCond -f, чтобы убедиться, что файл не существует, а затем переписать.

2 голосов
/ 14 февраля 2012

Используйте абсолютные пути, а не относительные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...