За последние 24 часа нас посетили 34936 программистов и 1756 роботов. Сейчас ищет 871 программист ...

Адреса

Тема в разделе "PHP для новичков", создана пользователем forest69, 12 окт 2010.

  1. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    Не знал куда написать
    Суть проблемы:

    Была структура сайта типа:
    www.site.ru/page.php

    Теперь структура такая:
    www.site.ru/index.php?page=page

    Как сделать так, чтобы при поиске сайта по старым ссылкам посетителя перенаправляло на новую аналогичную страничку? И что нужно сделать чтобы не пропасть из поиска у поисковиков.

    Идея прописать что-то в файле Robots.txt
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    скорее в индекс.пхп надо прописать чтобы отдавал нужные страницы когда запрошены эти
     
  3. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    а на это есть какие-то команды?
     
  4. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    возможно выходом является .htaccess ?
    Код (Text):
    1. RewriteRule ^page.php index.php?page=page [L]
     
  5. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    Вот нашел в интернете

    Перенаправление несуществующих URL на другой веб-сервер

    Описание:
    Типичный часто задаваемый вопрос по URL преобразованиям — это как перенаправить несуществующие запросы с сервера А на сервер B. Обычно это делается через ErrorDocument CGI-скрипты на Perl, однако с модулем mod_rewrite тоже есть решение. Заметьте однако, что это менее ресурсоёмко чем использвание ErrorDocument CGI-скрипта!

    Решение:
    Первое решение имеет лучшую производительность однако меньшую гибкость и меньшую защиту от ошибок:

    PHP:
    1. RewriteEngine on
    2. RewriteCond   /your/docroot/%{REQUEST_FILENAME} !-f
    3. RewriteRule   ^(.+)                             [url=http://webserverB.dom/$1]http://webserverB.dom/$1[/url]
    Проблема здесь в том, что это будет работать только для страниц находяшихся внутри DocumentRoot . Тогда как вы можете добавить больше условий (например ещё и для управления домашними каталогами, и т.д.) есть лучший вариант:

    PHP:
    1. RewriteEngine on
    2. RewriteCond   %{REQUEST_URI} !-U
    3. RewriteRule   ^(.+)          [url=http://webserverB.dom/$1]http://webserverB.dom/$1[/url]
    Здесь используется особенность mod_rewrite — URL look-ahead(смотреть вперед). В результате это будет работать для всех типов URL и к тому же это безопасно. Однако это снижает производительность веб-сервера, потому что для каждого запроса производится более одного внутреннего подзапроса. Поэтому, если ваш веб-сервер имеет мощный процессор, используйте этот вариант. Если это медленная машина, используйте первый или лучше ErrorDocument CGI-скрипта.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    forest69
    покажи свой .htaccess сначала.
     
  7. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    его пока нет
    я пока сайт дописываю. а это на будущее решил узнать, чтоб потом не искать
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у меня вот такой .htaccess
    Код (Text):
    1. <IfModule mod_rewrite.c>
    2.   RewriteEngine on
    3.   RewriteCond %{REQUEST_FILENAME} !-f
    4.   RewriteCond %{REQUEST_FILENAME} !-d
    5.   RewriteCond %{REQUEST_URI} !=/favicon.ico
    6.   RewriteRule ^(.*)$ index.php?$1 [L,QSA]
    7. </IfModule>
    дальше все идет в index.php
    в нем я делаю так

    $url = parse_url( $CFG_STRINGS['site_url'].$_SERVER['REQUEST_URI'] );

    ну и дальше пляшем. Если такой страницы не найдено - ты можешь проверить урл, и если он подпадает под вид старого способа - перенаправить на нужную страницу. Вот и все.
     
  9. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    ок.
    пасиба
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    forest69
    не забудь делать заголовок при отсутствующей странице
    header("HTTP/1.0 404 Not Found")
     
  11. forest69

    forest69 Активный пользователь

    С нами с:
    14 сен 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Люберцы
    Возвратившись к этому вопросу, накопал в инете такую статью:

    От старого с новому (внешнее)

    Описание:

    Снова предположим что мы недавно переименовали страницу bar.html в foo.html и хотим сейчас для обратной совместимости сделать доступным и старый URL. Однако, в этот раз мы хотимчтобы пользователи использующие старый URL узнали этот новый URL, т.е. адресная строка их браузеров также должна измениться.

    Решение:

    Мы используем HTTP редирект на новый URL который приведет к к изменениям в браузерах(в адресной строке) и таким образом это видят пользователи:

    Код (Text):
    1. RewriteEngine on
    2.  
    3. RewriteBase /~quux/
    4.  
    5. RewriteRule ^foo\.html$ bar.html [R]
    Но никак не пойму как работает RewriteBase, находил описание в инете, но все равно не понял
    Кто знает как она работает?