2010-04-05 3 views
4

Поэтому я переписал мои пути к чему-то вроде: URL/really/nice/paths/ с использованием правил mod_rewrite, как это:Rewrite CSS/JS пути

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

Вопрос заключается в том, как я мог бы переписать пути для JS/CSS/файлов изображений, тоже, так что когда они запрашиваются с относительным путем от URL/really/nice/path/ для обслуживания от URL/scripts/, URL/styles/ и URL/images/ папками вместо этого? Можно ли это сделать без использования RewriteBase?

+0

Просьба уточнить ваш вопрос. Пользовательские агенты никогда не используют относительный путь при запросе файлов на HTTP. Они разрешают их перед запросом. – fuxia

ответ

11

Когда URL-адреса переписаны, клиент не знает об этом. Поэтому, когда клиент просматривает страницу по URL «example.com/some/url/», а страница ссылается на изображение в «images/image.jpg», клиент ищет изображение в «example.com/some/ url/images/image.jpg ", хотя страница действительно находится в" example.com/some/other/url/ ". Это проблема, с которой вы сталкиваетесь, не так ли?

Есть три основных пути решения этой проблемы:

  1. использовать абсолютные пути к ресурсам, а не относительные.
  2. Используйте тег <base>, чтобы убедиться, что клиент знает корневой каталог, на котором его относительные URL-адреса отличаются от видимого URL-адреса страницы.
  3. Добавить новое правило для "some/url/images /" в правилах перезаписи.

Вариант 1, вероятно, лучшая идея, и вы обнаружите, что большинство сайтов, использующих переписывание URL-адресов, используют его, включая сам переполнение стека. Вариант 2 нахмурился, но работает и относительно прост. Вариант 3 является наиболее сложным для поддержания, поскольку исключения перезаписи URL и особые случаи могут появляться по мере того, как вы определяете новые правила.

Наиболее удобным решением является использование абсолютных URL-адресов.

+0

Вариант 2 является привлекательным. Я не знал, что существует тег ''. Почему он нахмурился? Вариант 1 не очень изящный, когда вам нужно загрузить кучу JS-файлов из другого JS-файла. Или использовать изображения в CMS. –