Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по rewrite mod и внутренним путям
 
 автор: cosmix   (30.09.2010 в 18:08)   письмо автору
 
 

Привет!

У меня возникла такая проблема с 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 , а вот ссылки на этой странице он переписывает,прибавляя к ним исходный относительный путь запроса.

Почему так, и как это исправить?
Я так подозреваю что надо поставить какой-то флаг - но попробовав, ничего не вышло.

Так как же заставить браузер переписывать путь до элементов на странице, не прибавляя относительного пути в запросе ?

Спасибо!

  Ответить  
 
 автор: heed   (01.10.2010 в 03:59)   письмо автору
 
   для: cosmix   (30.09.2010 в 18:08)
 

html-тег <base> или отказ от использования относительных путей в ссылках, картинках, линках ....
// использование output-фильтра возможно , но слишком затратно

  Ответить  
 
 автор: cosmix   (01.10.2010 в 10:26)   письмо автору
 
   для: heed   (01.10.2010 в 03:59)
 

Большое спасибо, получилось при помощи тега base.

Но скажите пожалуйста, где почитать про технику с output-фильтром (это связано как-то с apache-инструкциями или нет вообще? ).

И второй вопрос.
Неужели такой мощный инструмент как rewrite mod
не в состоянии дать браузеру как-то дополнительно понять о намерении
заменять любой исходный путь с любым количеством слэшей в нём (например "anypath_1/.../anypath_n") на путь выше по иерархии (например на "/") не только для самого файла замены, но и для всех ссылок внутри него?

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

  Ответить  
 
 автор: heed   (01.10.2010 в 11:47)   письмо автору
 
   для: 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.
, если ничего не упустил.

// упустил "и т.д."

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования