индексация сайта - как получить правильный url

Argo

Новичок
индексация сайта - как получить правильный url

Доброго времени суток уважаемые посетители клуба php

Мой вопрос заключается в следущем.

Задача:
Индексация/парсинг страниц сайтов и выдергивание из них URLей на которые ссылаются ссылки.

Проблема:
Ссылки на страницах не всегда абсолютные, а точнее почти всегда относительные.
Допустим я индексирую страницу находящуюся по адресу site.ru/forum/
Вижу в ней ссылку с таким адресом href='cat/page.php'
Соответственно чтобы проити по этой ссылке, и проиндексировать страницу на которую она ведет я должен запросить страницу по адресу site.ru/forum/cat/page.php

Вопрос:
Как мне (точнее программе) понять является ли basename страницы папкой, или же файлом со строкой запроса.
Допустим простейший алгоритм $page_url + $href не подходит т.к. в случае индексации страницы типа site.ru/show.php?id=101 (где basename это как раз файл с запросом )при использовании данного алгоритма мы получим site.ru/show.php?id=101/cat/page.php что естесственно неверно.

Также существуют ещё более сложные случаи допустим ссылка выглядит так href='../../page.php'

И всеже главный вопрос, как определить является ли basename страницы папкой, или же файлом со строкой запроса.
Точно существуют алгоритмы для решения данной проблемы, т.к. в браузерах url на который ведет ссылка отображается верно. Также верно индексируют подобные ссылки поисковики.

Спасибо за внимание к моей проблеме, буду благодарен за ответы и подсказки.
 

Argo

Новичок
Автор оригинала: kruglov
Если строка запроса - то, что после "?", то [m]strpos[/m] и [m]explode[/m]
- Если используется mod_rewrite то совершенно не обязательно наличие '?' перед запросом
- отнють не все страницы сайтов с запросами. что-то типа site.ru/forum/show.php/page.php может получится если использовать Ваш алгоритм.
 

kruglov

Новичок
Argo
Индексатору сайта совершенно все равно, использовался ли mod_rewrite.

Сервер на запрос xxx обязан сделать редирект на xxx/, если это директория. Если / в конце уже есть - уже директория.
 

Argo

Новичок
Автор оригинала: kruglov
Argo
Индексатору сайта совершенно все равно, использовался ли mod_rewrite.

Сервер на запрос xxx обязан сделать редирект на xxx/, если это директория. Если / в конце уже есть - уже директория.
Вы либо не поняли мой вопрос, либо не пытались вникнуть в его суть.

Я понимаю что серверу всеравно, невсеравно для моей задачи.
Задан был вопрос, как определить, является ли basename пути папкой или файлом. Если Вы не понимаете, что такое basename - объясняю basename() это функция php которая возвращает последний элемент пути. Например
PHP:
basename('http://www.site.ru/forum/cat/page.php');
Вернет -> page.php.
PHP:
basename('http://www.site.ru/forum/cat/');
Вернет -> cat

В первом случае - имя файла
Во втором - папки

Для чего мне нужно различать файлы или папки я описал в первом посте. Также я описал проблемы и сложности связанные с этим.

Спасибо.
 

Фанат

oncle terrible
Команда форума
RUNET
ну куда ты-то, в калашный ряд?
ты даже вопроса не понял
 

gonza

Новичок
Автор оригинала: kruglov
у папки в конце слеш, у файла нет
создал на сервере директорию aha, положил в нее index.html, запрашиваю site.ru/aha, получаю индекс.
Что я делаю не так? :D

-~{}~ 19.04.07 19:40:

В смысле как до обращения к документу понять - что там будет - файл aha или директория aha?
Имхо - никак.

-~{}~ 19.04.07 19:50:

В смысле также можно создать директорию index.php, положить в нее index.html и запрашивать site.ru/index.php
 

phprus

Moderator
Команда форума
gonza
создал на сервере директорию aha, положил в нее index.html, запрашиваю site.ru/aha, получаю индекс.
Что я делаю не так?
Ты плохо прочитал сообщение kruglov:
Сервер на запрос xxx обязан сделать редирект на xxx/, если это директория. Если / в конце уже есть - уже директория.
В твоем примере при запросе site.ru/aha будет сделан редирект на site.ru/aha/ и только после этого будет выведен index.html.
 

gonza

Новичок
Автор оригинала: phprus
gonza

Ты плохо прочитал сообщение kruglov:

В твоем примере при запросе site.ru/aha будет сделан редирект на site.ru/aha/ и только после этого будет выведен index.html.
Ага, при запросе. А чел не запрашивает, обратите внимание. Он парсит урл.
В смысле как до обращения к документу понять - что там будет - файл aha или директория aha?
Имхо - никак.
Я не прав?

Ага. Ура. Не прошло и полгода, а я уже понял вопрос. Чел хочет базу УЖЕ запрошенного документа. Увы и ах. Те же яйца, только в профиль. Профиль выглядит так
<BASE href="http://site.ru/aha">
<a href="?id=1">
или так
<BASE href="http://site.ru/index.php">
<a href="?id=1">
где index.php вполне себе может быть директорией.
 

flashback

Новичок
функция preg_match_all
регулярное выражение делаешь с "карманами" т.е. заключенными в скобки, например - (href)?
функция вернет массив найденных значений, можешь посмотреть их print_r
далее проверишь карманы с (href), (http://) и расширениями, например (\.html | php | htm)
по их значениям можно сделать вывод -
- страница или путь
- внутри сайта или внешняя ссылка
 

kruglov

Новичок
flashback
Свежий взгляд на проблему. Если бы ее почитать еще внимательно...
 

flashback

Новичок
kruglov, я недавно сам эту проблему решал.
для ее решения достаточно посвятить 30 мин. изучения составления регулярных выражений и RFC по разрешенным символам в URL.
 

gonza

Новичок
Автор оригинала: flashback
для ее решения достаточно посвятить 30 мин. изучения составления регулярных выражений и RFC по разрешенным символам в URL.
Жаль, что ты так и не нашел эти полчаса. Еще больше жаль что ты не нашел пяти минут почитать тред.
 
Сверху