Редирект для ошибки 500

Тема в разделе "Как сделать...", создана пользователем erik87, 23 апр 2013.

  1. erik87

    erik87

    Регистр.:
    30 сен 2008
    Сообщения:
    205
    Симпатии:
    10
    Как сделать редирект страницы /?format=feed&type=rss на /discussions/feed?type=rss.
    Redirect 301 для .htaccess на помогает.
     
  2. leha706

    leha706 Постоялец

    Регистр.:
    6 мар 2013
    Сообщения:
    92
    Симпатии:
    32
    Делали вот так?
    Включить модуль Apache mod_rewrite.
    Включить ReWriteEngine в модуле mod_rewrite.
    Код:
    Options +FollowSymLinks
    RewriteEngine on
    Код:
    Redirect 301 /?format=feed&type=rss http://www.ваш сайт.ru/discussions/feed?type=rss
    Попробуйте вариант php редиректа :
    В начало страницы (обязательно до всех echo и print)

    Код:
    <?
    $ref=$_SERVER['QUERY_STRING'];
    if ($ref='?format=feed&type=rss')
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.ваш сайт.ru/discussions/feed?type=rss');
    exit();
    ?>
     
    erik87 нравится это.
  3. gothmog

    gothmog Постоялец

    Регистр.:
    18 июн 2011
    Сообщения:
    60
    Симпатии:
    24
    Немного неясен вопрос. При переходе на определенную страницу у вас возникает ошибка 500? Имхо, лучше разобраться сначала, почему скрипт дает такую ошибку. Кроме того, разве при 500 ошибке файл htaccess работает вообще? Если на сервере ошибка и он прекращает выполнение вашего потока? Я не силен в апаче, но чисто логически.
     
  4. erik87

    erik87

    Регистр.:
    30 сен 2008
    Сообщения:
    205
    Симпатии:
    10
    Да, при переходе на /?format=feed&type=rss - ошибка 500. Страница есть на /discussions/feed?type=rss

    Leha76,

    При следующих настройках - без изменений:
    Код:
    Options +FollowSymLinks
    RewriteEngine on
    Сайт на Джумле 2.5. Может посоветуете, куда попробовать вставить ваш код:
    Код:
    <?
    $ref=$_SERVER['QUERY_STRING'];
    if ($ref='?format=feed&type=rss')
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.ваш сайт.ru/discussions/feed?type=rss');
    exit();
    ?>
     
  5. tan_81

    tan_81 Постоялец

    Регистр.:
    18 окт 2006
    Сообщения:
    128
    Симпатии:
    30
    Ну вставить то можно в шаблон по идее на самый самый верх, но это не дело по сути.
    Почитайте вот это вот
     
    erik87 нравится это.
  6. leha706

    leha706 Постоялец

    Регистр.:
    6 мар 2013
    Сообщения:
    92
    Симпатии:
    32
    Вставить то можете хоть в index.php, но вам похоже придется сначала разобраться с причиной 500 ошибки, здесь я соглашусь с gothmog. У вас лента новостей правильно настроена? Да на Джумле 2.5 вообще нет необходимости для написания перенаправления вручную. Есть для этого встроенный компонент, в котором все перенаправления сохранятся при обновлении.
     
  7. erik87

    erik87

    Регистр.:
    30 сен 2008
    Сообщения:
    205
    Симпатии:
    10
    Причина ошибки 500 думаю в том, что на главной у нас только модули и баннеры, а лента новостей на /discussions/feed?type=rss. Поэтому и собираюсь сделать редирект.
    Код:
    <?
    $ref=$_SERVER['QUERY_STRING'];
    if ($ref='?format=feed&type=rss')
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.ваш сайт.ru/discussions/feed?type=rss');
    exit();
    ?>
    - не помогает.
     
  8. leha706

    leha706 Постоялец

    Регистр.:
    6 мар 2013
    Сообщения:
    92
    Симпатии:
    32
    У меня в .htaccess упоминается feed только здесь:
    Код:
    # If the requested path and file is not /index.php and the request
    # has not already been internally rewritten to the index.php script
    RewriteCond %{REQUEST_URI} !^/index\.php
    # and the request is for something within the component folder,
    # or for the site root, or for an extensionless URL, or the
    # requested URL ends with one of the listed extensions
    RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
    # and the requested path and file doesn't directly match a physical file
    RewriteCond %{REQUEST_FILENAME} !-f
    # and the requested path and file doesn't directly match a physical folder
    RewriteCond %{REQUEST_FILENAME} !-d
    # internally rewrite the request to the index.php script
    RewriteRule .* index.php [L]
    В коде страницы у меня присутствуют две ссылки прямо под тегом <title>:
    Код:
    <link href="/?format=feed&amp;type=rss" rel="alternate" type="application/rss+xml" title="RSS 2.0" />
      <link href="/?format=feed&amp;type=atom" rel="alternate" type="application/atom+xml" title="Atom 1.0" />
    Обе открываются без ошибок. И содержат данные из статьи, размещенной на главной странице.
    Но при этом в компоненте com_newsfeeds у меня никаких лент новостей нет.
    Попробуйте разместить на главной статью с одной строчкой текста и посмотрите на результат.
     
    erik87 нравится это.
  9. gothmog

    gothmog Постоялец

    Регистр.:
    18 июн 2011
    Сообщения:
    60
    Симпатии:
    24
    Есть индусский вариант, но если ничего не помогает (при серверных ошибках хтакцесс может тупо не срабатывать), я бы сделал так - просто на серверной странице 500 ошибки поставил яваскрипт-редирект куда надо. Т.е. алгос такой - юзер попадает на проблемную страницу, сервер выдает ошибку 500 (хтмл и js код), браузер делает переход куда надо.

    Но лучше все таки разобраться, почему идет эта ошибка. Логи ошибок посмотрите, куда-то же это должно записываться. У меня такое было на некоторых скриптах, когда хостер перешел на РНР 5.4 и часть старых функций стали с deprecated => fatal error.
     
    erik87 нравится это.
  10. nethare

    nethare Постоялец

    Регистр.:
    27 окт 2012
    Сообщения:
    104
    Симпатии:
    30
    Ошибка 500 - внутренняя ошибка сервера. Вызвана бывает обычно неверной конфигурацией, в данном случае скорее всего виртуалхоста или того же редиректа. Лог веб-сервера с описанием ошибки, пожалуйста, покажите.

    UPD:

    Заметил ошибку в вашем коде: if ($ref='?format=feed&type=rss').

    PHP:
    <?
    $ref=$_SERVER['QUERY_STRING'];
    if (
    $ref=='?format=feed&type=rss')
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.ваш сайт.ru/discussions/feed?type=rss');
    exit();
    ?>
     
    Операция сравнения в php "==", или "===" (без сведения типов).