За последние 24 часа нас посетили 18099 программистов и 1590 роботов. Сейчас ищут 1206 программистов ...

mod_rewrite: выдавать стандартную 404 ошибку на запрос

Тема в разделе "Регулярные выражения", создана пользователем XDmitry, 19 фев 2013.

  1. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Необходимо, средствами mod_rewrite, выдавать стандартную 404 ошибку на запрос типа http://example.ru/node/"любое число".
    Например:
    http://example.ru/node/2547 -> 404 Not Found...
    Никак не получается составить правило в .htaccess. Прошу помощи.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    на вскидку . - [R=404]
    реврайт не умеет отвечать кодами, но умеет перенаправить к документу, который залупит браузеру правильный код.
    кстати, если у вас раньше были ресурсы по данной схеме, а теперь нет и не будет - не 404 Not Found надо, а 410 Gone
     
  3. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Как-то так?

    RewriteBase /
    RewriteRule ^node/*$ [R=404,L]
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    RewriteBase /
    RewriteRule ^node/ - [R=404]
     
  5. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Не работает
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как проверяем?
     
  7. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    прописываю это дело в .htaccess. Реальных папок node/ нету, может через RewriteCond %{REQUEST_URI}? Или я что-то не понимаю.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    так, сначала давайте =)
    глобально на сервере/хосте опции не ниже FileInfo
    так же как минимум RewriteEngine On

    помещаем .htaccess (на всякий случай такого вида)
    Код (Text):
    1. RewriteEngine On
    2. RewriteBase /
    3. RewriteRule ^node/ - [R=410]
    теперь пробуем обратиться к любому адресу правлее /node/ или к нему самому - должны увидеть 410 Gone ошибку
     
  9. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Вот с 410 работает, а с 404 нет. Почему так? Сразу поясню, что пути типа /node/... это реальные адреса, формируемые CMS Drupal, а использовать собираюсь синонимы. Соответственно по всем node/ необходимо возвращать 404, чтобы избежать дублей.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    так и оставьте 410. это лучше чем 404
     
  11. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Нужно именно 404, что подтверждает - такой страницы на сервере никогда не было, в отличие от 410-ой - страница была, но сейчас нету.
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы меня удивляете =)
    замените 410 на 404, создайте папку node и в ней пару ресурсов - будете постоянно видеть 404. реврайт работает как надо))) а 410 или 404 это да, от задачи зависит
     
  13. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Можно подробнее?
     
  14. XDmitry

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

    С нами с:
    22 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Как всегда, проблема была простой: в .htaccess нужно было закомментировать строку
    Код (Text):
    1. ErrorDocument 404 /index.php