Вопрос о формировании ссылки

M
На сайте с 21.01.2004
Offline
143
872

Слышал много раз, что для поисковые роботы больше любят ссылки вида:

http://domain.ru/razdel/page/3/ чем ссылки вида:

http://domain.ru/razdel.php?id=3

Так вот. Вопрос такой. Как сформировать ссылки 1 типа из ссылок 2 типа? Слышал, что делается это вроде при помощи mod rewrite... Может кто-нибудь объяснить подробнее, или дать ссылку на русский мануал по этому делу.

M
На сайте с 08.03.2004
Offline
2
#1

Упрощенно.

1.Формируем файл .htaccess


RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)\.htm$ /htm.php/$1

Теперь все адреса *.htm обрабатываются htm.php

в котором:


$urls = split("/", $rur);
$link= $urls[1] ? $urls[1] : "index";
if (count($urls)>2) {
for($i=1; $i<count($urls); $i++) {
if (eregi("_", $urls[$i])) {
list($par, $value) = explode("_", $urls[$i]);
$$par = $value; }
}}

Разбиваем на папки, причем все папки вида page_1 (для примера) для скрипта получаются как переменные ($page = 1)

если есть QUERY_STRING лучше обработать:


<?
$rurs = $REQUEST_URI;
@list($rur, $qst) = explode("?", $rurs);
if ($qst) {
$qst = urldecode($qst);
$qss = split("&", $qst);
for($i=0; $i<count($qss); $i++) {
list($par, $value) = explode("=", $qss[$i]);
$$par = $value;
}}
?>

Теперь есть массив папок ($urls) (первая - $link) и переменные.

Все 200 или 404.

Конечно второй кусок скрипта дожен быть раньше первого.

Есть ошибки

Lupus
На сайте с 02.11.2002
Offline
241
#2

Возможно, я ошибаюсь, но модуль mod_rewrite дает только психологический эффект. С технической точки зрения, он просто выдает http заголовок Location: <другой адрес>. А значит для робота именно другой адрес и будет тем, который он учтет. А про "красивый" он сразу же забудет, поскольку на нем лишь редирект. Однако не стоит беспокоиться о "любви" и "нелюбви" роботов к строке запроса в URI. Основные роботы уже давно относятся к ним одинаково (maybe, за исключением апорта). Но и апорт не отказывается от динамических адресов - он ограничивает их количество. (Хотя все меняется).

Прошу не воспринимать вышенаписанное, как credo experto, это только IMHO ;)

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
C
На сайте с 19.09.2001
Offline
120
#3
Возможно, я ошибаюсь, но модуль mod_rewrite дает только психологический эффект. С технической точки зрения, он просто выдает http заголовок Location: <другой адрес>.

Lupus, вы действительно ошибаетесь. Все зависит, конечно, от правил перезаписи, но в большинстве случаев получаются дубли страниц с "динамическими" и "статическими" адресами.

С уважением, Владимир Чернышов. (не)?путевые заметки (http://chernyshov.kiev.ua/)
Nikolai Popkov
На сайте с 07.06.2001
Offline
291
#4

http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html

Руководство по URL преобразованиям

Перевод Apache URL Rewriting Guide в оригинале написанного Ralf S. Engelschall. Этот документ дополняет документацию к mod_rewrite. Он описывает возможности использования mod_rewrite веб-сервера Apache.

http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html

Модуль Apache mod_rewrite

Перевод документации Apache по модулю mod_rewrite — реализующему механизм URL преобразований.

партнерские программы (http://www.ebanners.ru/viewforum.php?f=7), словарь термины SEO (http://www.ebanners.ru/viewtopic.php?t=548) Форум маркетинг (http://www.reclama.su/) Reclama.Su, обмен ссылками (http://www.ebanners.ru/viewforum.php?f=13), Reklama.SU: контекстная реклама (http://www.reklama.su/) по цене Яндекса+продвижение за результат
Lupus
На сайте с 02.11.2002
Offline
241
#5
Lupus, вы действительно ошибаетесь. Все зависит, конечно, от правил перезаписи, но в большинстве случаев получаются дубли страниц с "динамическими" и "статическими" адресами.

Мне только хотелось бы понять, в чем именно моя ошибка: в понимании работы mod_rewrite или в оценке реакции роботов на редирект?

Если дело в первом, вот простейший пример, который я сразу попробовал, по прочтении вашего возражения:


RewriteRule ^([0-9A-Za-z_\-]*\.)shtml$ $1php [P]

GET http://www.system.loc/1.shtml

1 HTTP/1.1 302 Found
2 Date: Mon, 08 Mar 2004 20:47:27 GMT
3 Server: Apache/2.0.40 (Unix)
4 Location: http://www.system.loc/1.php
5 Content-Length: 301
6 Keep-Alive: timeout=7200, max=100
7 Connection: Keep-Alive
8 Content-Type: text/html; charset=iso-8859-1
Location: http://www.system.loc/1.php [following]

И далее клиент делает еще один запрос уже по новому адресу.

[Удален]
#6
Мне только хотелось бы понять, в чем именно моя ошибка: в понимании работы mod_rewrite или в оценке реакции роботов на редирект?

В понимании работы mod_rewrite. :)

вот простейший пример, который я сразу попробовал

А зачем там [P] в конце RewriteRule? Оно и вызывает редирект похоже, надо просто [L] там поставить.

Григорий Селезнев
На сайте с 25.09.2001
Offline
298
#7

для пользователя сервер выдает прямой ответ (без редиректов), а то, что он уже делает внутри определяется Вашими настройками и скриптами ...

иногда помогает просмотр реальных заголовков того, что выдает сервер ;-))

Lupus
На сайте с 02.11.2002
Offline
241
#8
А зачем там [P] в конце RewriteRule? Оно и вызывает редирект похоже, надо просто [L] там поставить.

Точно! Теперь апач делает вид, что все 200 :)

Вообще-то я верил, что все не так плохо, но ленился искать хорошее ;)

RTFM, стало быть.

M
На сайте с 21.01.2004
Offline
143
#9
Как писал Nikolai Popkov
http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html Руководство по URL преобразованиям

http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
Перевод документации Apache по модулю mod_rewrite

Спасибо за информацию...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий