У меня также была проблема с таблицами стилей и изображениями.
Я не хотел использовать решение Base Href и исправил проблему с обновлением относительных путей, чтобы начать с одного слеша.
Мои настройки
nopCommerceStore используется для создания интернет-магазина.
nopCommerce использует библиотеку UrlRewritingNet.UrlRewrite для обработки перезаписи URL.
nopCommerce использует темы и скины ASP.NET для определения внешнего вида интернет-магазина.
На стороне сервера у вас есть следующая структура папок:
корень
корень / App_Themes / darkOrange / base.css
корень / App_Themes / darkOrange / корзина кассового-order.css
корень / App_Themes / darkOrange / category.css
root / App_Themes / darkOrange / css / ie6.css (этот файл был в конечном итоге удален)
корень / App_Themes / darkOrange / IMG / transparent_image_example.png
корень / CSS / ie6.css
root / MasterPages / Root.Master
root / Default.aspx root / Category.aspx
При посадке на страницу по умолчанию (браузер запрашивает http; // yourstore / default.aspx) ваш HTML-источник будет содержать следующий HTML-код:
<link href="App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />
...
Браузер выполнит следующие запросы:
HTTP; // yourstore / App_Themes / darkOrange / base.css
HTTP; // yourstore / App_Themes / darkOrange / корзина кассового-order.css
HTTP; // yourstore / App_Themes / darkOrange / category.css
...
При нажатии на категорию «Книги» браузер запрашивает http; // yourstore / Category / 29-books.aspx) ваш HTML-источник будет содержать следующий HTML-код:
<link href="../App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />
Браузер выполнит следующие запросы:
HTTP; // yourstore / Категория /../ App_Themes / darkOrange / base.css
HTTP; // yourstore / Категория /../ App_Themes / darkOrange / корзина кассового-order.css
HTTP; // yourstore / Категория /../ App_Themes / darkOrange / category.css
Прозрачный PNG в IE6
Пока все работает нормально. Чтобы сделать внешний вид постоянным во всех браузерах, необходимо загрузить специальную таблицу стилей IE6.
Я узнал две важные вещи:
Не добавляйте таблицу стилей в папку «App_Themes», а помещайте ее в отдельную папку.
При ссылках на изображения используйте относительные пути, начинающиеся с одной косой черты.
Таблицы стилей и папка App_Themes:
Чтобы применить определенный макет к страницам, которые просматриваются в IE6, я создал новую таблицу стилей и поместил ее в папку «root / App_Themes / darkOrange / css».
В файл 'root / MasterPages / Root.Master' я добавил следующие строки HTML-кода:
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->
Когда файл Css помещается в папку «App_Themes» или в подпапку в «App_Themes», на него автоматически ссылаются.
Это вызвало нежелательное поведение в браузерах не IE6. Макет IE6 был применен к странице и испортил внешний вид страницы.
При посадке на страницу по умолчанию (браузер запрашивает http; // yourstore / default.aspx) сервер проанализирует запрос.
Полученный HTML-источник будет содержать следующий HTML-код:
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->
Но также HTML содержит следующую строку:
<link href="App_Themes/darkOrange/css/ie6.css" type="text/css" rel="stylesheet" />
Все браузеры будут запускать следующий запрос:
HTTP; // yourstore / App_Themes / darkOrange / CSS / ie6.css
IE6 запустит дополнительный запрос (файл будет извлечен из кэша IE):
HTTP; // yourstore / App_Themes / darkOrange / CSS / ie6.css
Это было нежелательное поведение, поэтому мне пришлось заменить файл ie6.css на новую папку. Теперь он помещен в «root / css / ie6.css».
Ссылки на изображения, перезапись URL и относительные пути:
Для поддержки прозрачных изображений png в IE6 файл ie6.css содержит некоторые свойства css 'filter'.
например. Один из селекторов div будет содержать следующую строку кода CSS:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='crop', src='../App_Themes/darkOrange/img/transparent_image_example.png');
При посадке на страницу по умолчанию (браузер запрашивает http; // yourstore / default.aspx) IE6 будет запрашивать:
HTTP; // yourstore / IMG / transparent_image_example.png
При нажатии на категорию «Книги» браузер запрашивает http; // yourstore / Category / 29-books.aspx). IE6 запрашивает:
HTTP; // yourstore / IMG / transparent_image_example.png
В обоих случаях отображается «Страница не найдена» (HTTP / 1.1 404 Not Found).
После замены:
.. / App_Themes / darkOrange / IMG / transparent_image_example.png '
С:
/ App_Themes / darkOrange / IMG / transparent_image_example.png '
Все работало нормально.
Это потому, что относительный путь начинается с одной косой черты.
Браузер будет интерпретировать URL следующим образом:
Это начинается с 'http; //'? Если да, это должен быть абсолютный путь; Если нет, это должен быть относительный путь.
Относительные пути:
Это начинается с одного слеша? Если да, это должна быть ссылка на абсолютный путь; Если нет, это должна быть ссылка на относительный путь
примечание: см. Раздел 5 «Относительные ссылки на URI» в документе «Унифицированные идентификаторы ресурсов (URI): общий синтаксис» (http://www.ietf.org/rfc/rfc2396.txt).
)
В случае переписанных страниц URL:
Браузер не будет работать при использовании «ссылок относительного пути» (например, «http; // yourstore / Category / 29-books.aspx» и «../App_Themes/darkOrange/img/transparent_image_example.png').*» 1161 *
Браузер преуспеет при использовании «ссылок на абсолютный путь» (например, «http; // yourstore / Category / 29-books.aspx» и «/App_Themes/darkOrange/img/transparent_image_example.png').
»