|
|
|
| Привет!
У меня возникла такая проблема с rewrite mod.
Хотел бы чтобы при запросе
http://site.net/anypath_one/anypath_two/anypath_n/56
Выдавалась страница
http://site.net/a_page56.html
Для чего написал такой код в .htaccess:
RewriteEngine on
RewriteBase /
RewriteRule (\d+)$ a_page$1.html
И поместил .htaccess в document root.
Страница a_page56.html действительно выдаётся , но вот
относительные пути к элементам на странице - картинкам и пр. изменены на относительный путь при запросе. то есть я получаю на конечной странице a_page56.html
картинки с путями полного запроса, например, вместо
пути для картинки
http://mysite.net/image.gif
браузер показывает путь до неё (в свойствах картинки)
http://site.net/anypath_one/anypath_two/anypath_n/image.gif .
Таким образом, саму страницу a_page56.html он находит относительно базового пути - в данном случае относительно document root , а вот ссылки на этой странице он переписывает,прибавляя к ним исходный относительный путь запроса.
Почему так, и как это исправить?
Я так подозреваю что надо поставить какой-то флаг - но попробовав, ничего не вышло.
Так как же заставить браузер переписывать путь до элементов на странице, не прибавляя относительного пути в запросе ?
Спасибо! | |
|
|
|
|
|
|
|
для: cosmix
(30.09.2010 в 18:08)
| | html-тег <base> или отказ от использования относительных путей в ссылках, картинках, линках ....
// использование output-фильтра возможно , но слишком затратно | |
|
|
|
|
|
|
|
для: heed
(01.10.2010 в 03:59)
| | Большое спасибо, получилось при помощи тега base.
Но скажите пожалуйста, где почитать про технику с output-фильтром (это связано как-то с apache-инструкциями или нет вообще? ).
И второй вопрос.
Неужели такой мощный инструмент как rewrite mod
не в состоянии дать браузеру как-то дополнительно понять о намерении
заменять любой исходный путь с любым количеством слэшей в нём (например "anypath_1/.../anypath_n") на путь выше по иерархии (например на "/") не только для самого файла замены, но и для всех ссылок внутри него?
Другими словами, неужели нет другого способа с помощью директив дать понять браузеру, что после замены исходного пути на нужный путь к файлу мы хотим также и перезаписать исходный путь для всех встроенных в страницу элементов? Дать понять браузеру что текущий каталог и для путей до картинок,ссылок, находящихся в файле, изменился? | |
|
|
|
|
|
|
|
для: cosmix
(01.10.2010 в 10:26)
| | >мощный инструмент как rewrite
mod_rewrite: Provides a rule-based rewriting engine to rewrite requested URLs on the fly
>не в состоянии дать браузеру как-то дополнительно
протокол http позволяет отдать в заголовках дополнительные данные. Но в браузерах, насколько знаю, не предусмотрена аналогичная интерпритации <base>, интерпритация заголовков.
(или интерпр[u]е[/u]тации с(щ/ч)итают неошибочным, мне без разницы)
>про технику с output-фильтром
я так обозвал вообще сам принцип , когда уже сгенериированые скриптами или вообще статические html обрабатываются подгруженными/созданными функциями или отдельными программами, меняя содержимое передаваемых данных.
самое доступное просто буферизация и обработка в скриптах
<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>
|
второе наверное обьявление и создание обработчика (handler) для групп файлов
третье mod_ext_filter
четвёртое написание модуля apache для добавления своего фильтра к имеющимся для mod_filter.
, если ничего не упустил.
// упустил "и т.д." | |
|
|
|