За последние 24 часа нас посетили 22089 программистов и 1153 робота. Сейчас ищут 338 программистов ...

mod_rewrite, RewriteCond отдать 404. Нужна помощь

Тема в разделе "Прочее", создана пользователем Петр, 29 окт 2008.

  1. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Ситуация такая:

    Необходимо убедиться, чтобы при запросе любых некорректных URLs вида http://www.host.ru/?N,
    где где N – любой численный или строковый параметр,
    например, http://www.host.ru/?jkadf.ghfjklg, а также URLs вида http://www.host.ru/., http://www.host.ru/?, http://www.host.ru//
    сервер отдавал HTTP/1.1 404 Not Found, либо HTTP/1.1 301 Moved Permanently.

    Это все должно работать исключительно для главной страницы (/) и не затрагивать любые другие страницы (/news.php, /somethingelse.php).

    Логика
    1) редирект - логика такая: если страница главная - все запросы с QUERY_STRING переадресовывваем на главную исключение, если квери стринг содержит "_openstat"
    2) если страница тупо такая "http://www.host.ru/." или тупо такая "http://www.host.ru//"ставим редирект на 404.
     
  2. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. ^(^\w)$ 404.php
    В 404.php отдаём заголовок. Ну и с правилом следует поэксперементировать. Особенно с ключами, т.к. вроде есть ключ, который позволяет выставлять заголовок. Или нет, не помню. :)

    upd про хороший мануал чел из темы рядом напомнил.
     
  3. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Да, есть такая фишка [R=303] или [R=404]


    Вот решение:

    Код (Text):
    1. RewriteCond %{REQUEST_URI} ^/$
    2. RewriteCond %{QUERY_STRING} ^.+$
    3. RewriteCond %{QUERY_STRING} !_openstat=.+$
    4. RewriteRule ^.*$ http://%{HTTP_HOST}/? [R=301,L]
    5.  
    6. RewriteCond %{REQUEST_URI}    ^/[./]$
    7. RewriteCond %{QUERY_STRING} !_openstat=.+$
    8. RewriteRule ^.*$ http://%{HTTP_HOST}/? [R=301,L]