Как Apache знает, когда и как искать относительные пути? - PullRequest
0 голосов
/ 06 марта 2012

Если у нас есть такая файловая структура:

/
├── aboutus
│   ├── aboutus.html
│   └── logo.jpg
├── validate.php
├── index.html
└── logo.jpg

Хотя при ссылке на aboutus.html (т. Е. <a href="aboutus/aboutus.html">) нужно указывать папку, как в index.html, так и aboutus.html если вы разместите logo.jpg, Apache будет знать, какой из них загрузить.Вероятно, он ищет файл только в текущем каталоге.У меня есть следующая директива в разделе «Виртуальный хост»:

RewriteCond %{REQUEST_URI} !^/validate.php
RewriteRule ^/(.*) /validate.php?uri=$1

Я полностью новичок с этими правилами reweite, поэтому я хочу сделать выше: я хочу этоперехватывать любые запросы от браузера.К ним относятся запросы, введенные в адресной строке, а также запросы из веб-страниц (т. Е. Js-файлы, изображения ...).Затем я хочу отправить запрошенный файл на validate.php

validate.php, очевидно, проверяет пользователя, но, по сути, просто возвращает любой файл, запрошенный пользователем.Если aboutus.html вставляет свою картинку примерно так <img src = "logo.jpg"/>, как я могу гарантировать, что validate.php вернет /aboutus/logo.jpg, а не /logo.jpg?

Ответы [ 3 ]

1 голос
/ 10 марта 2012

Puk, Вы должны разделить два аспекта:

  • Любой HTTP-запрос, такой как GET , является абсолютным, а browser преобразует любые относительные атрибуты href или src на основе любого пути ссылающегося документа ( или путь, определенный в теге <base>), так что если вы загрузите http://somehost/fred/xx.html, который затем ссылается на изображение style1/images/pic.png, то браузер запросит http://somehost/fred/style1/images/pic.png

  • Как mod_rewrite обрабатывает пути совершенно по-другому. Это дело сервера. См. Документацию RewriteRule , в которой объясняется, как относительные и абсолютные пути оцениваются внутри конфигурации на сервер (apache.conf или vhost.conf) и внутри конфигурации на каталог (например, в .htaccess или блоке )

1 голос
/ 06 марта 2012

По сути, абсолютный путь определяется из базового ресурса и относительного URL-адреса ресурса (подробнее об этом здесь ). Чтобы ваш validate.php мог правильно разрешить относительные URL-адреса для изображений, таблиц стилей и т. Д., Вы должны как-то сообщить ему абсолютный URL-адрес документа, содержащего эти ресурсы (и это еще сложнее, если в документе есть <base> тег).

0 голосов
/ 06 марта 2012

В любом случае в файле htaccess вы всегда работаете с абсолютным путем.Я имею в виду, начиная с косой черты.

попробуйте использовать:

RewriteCond %{REQUEST_URI} !^/validate.php
RewriteRule ^(.*) /validate.php?uri=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...