ФорумРазработкаУстановка и администрирование ПОВебсервер → mod_rewrite

mod_rewrite

  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 0:46

    Не совсем понимаю как он работает. Пишу правило в .htaccess.
    Options FollowSymLinks
    RewriteEngine On

    RewriteBase /content/

    RewriteCond %{REQUEST_URI} /content/header/[^/]+/?$

    RewriteRule ^header/([^/]+)/?$ index.php?header=$1

    Передаю в URL нечто такое: http://somethin/content/head/privet
    Индекс файл печатает privet.
    Т.е. все нормально работает.

    Мне не понятно почему в логе это (см. аттач)

    Как то это нездорово столько действий делать…
    Почему когда идет редирект снова паттерн применяется. И что еще за subreq (подзапрос, откуда он берется?)
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 1:19, спустя 32 минуты 38 секунд

    Или все объясняется написанным здесь:
    http://httpd.apache.org/docs/2.2/rewrite/rewrite_tech.html
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2009 г. 2:06, спустя 47 минут 31 секунду

    попробуй использовать модификаторы
    [L], [R], [QSA] и др.
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 7:48, спустя 5 часов 42 минуты 2 секунды

    Да уже пробовал.
    [L] с этой точки зрения вообще ничего не дает.
    Как написано тут http://httpd.apache.org/docs/2.2/rewrite/rewrite_tech.html он вообще вначале применяет паттерн, а затем использует RewriteCond.
    Единственный модификатор, который помогает - [NS]. Subrequest проходят без преобразований
    Только не понятно откуда вообще этот Subrequest берется.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 7:56, спустя 8 минут 6 секунд

    Batler, вот тебе не похуй зачем столько действий?))
    Сапожник без сапог
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 8:12, спустя 15 минут 32 секунды

    Сам охуел но не похуй =)
    Нашел одну вещь. Если не использовать RewriteBase то код сокращается =)
    Даю 2 лога с Baseом и без.

    Для rew1.txt код .htaccess

    Options FollowSymLinks
    RewriteEngine On

    RewriteCond %{REQUEST_URI} /content/header/[^/]+/?$

    RewriteRule ^header/([^/]+)/?$ /content/index.php?header=$1 [L]


    Для rew2.txt код .htaccess

    Options FollowSymLinks
    RewriteEngine On

    RewriteBase /content/

    RewriteCond %{REQUEST_URI} /content/header/[^/]+/?$

    RewriteRule ^header/([^/]+)/?$ index.php?header=$1 [L]


    Меньше всего действий (rew3.txt)

    Options FollowSymLinks
    RewriteEngine On

    RewriteCond %{REQUEST_URI} /content/header/[^/]+/?$

    RewriteRule ^header/([^/]+)/?$ /content/index.php?header=$1 [L,NS]
    1. rew1.txt (74)
    2. rew2.txt (79)
    3. rew3.txt (109)
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 11:15, спустя 3 часа 2 минуты 59 секунд

    Да и еще по теме. Апач (mod_rewrite) случайно не изменяет кодировку строки?
    Пытаюсь передать русские символы. Если без реврайта - то нормально приходят.
    Если реврайт был, то белиберда какая - то…
  • disc

    Сообщения: 843 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2009 г. 11:18, спустя 2 минуты 53 секунды


    Да и еще по теме. Апач (mod_rewrite) случайно не изменяет кодировку строки?
    Пытаюсь передать русские символы. Если без реврайта - то нормально приходят.
    Если реврайт был, то белиберда какая - то…

    ты получаешь символы в кодировке веб-сервера в urlencode формате. Возможно что придется через iconv в самом скрипте пропускать, если например веб-сервер дает в 1251, а скрипт в утф8.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 11:23, спустя 5 минут 20 секунд

    Batler, открой для себя nginx)) там тоже байт оптимизацией разраб занимается))
    Сапожник без сапог
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 12:15, спустя 52 минуты 4 секунды

    Для меня это было оптимизацией ради оптимизации =)
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 12:28, спустя 12 минут 16 секунд


    ты получаешь символы в кодировке веб-сервера в urlencode формате. Возможно что придется через iconv в самом скрипте пропускать, если например веб-сервер дает в 1251, а скрипт в утф8.

    Вот блин пропускаю и нийуха нет =(

    Смотрим:

    Я создаю строку чтобы подставить ее потом в браузер (для чистоты эксперимента создаю ее на php а затем копирую в адресную строку броузера)

    echo rawurlencode(iconv('cp1251', 'UTF-8','Привет как дела'));  


    Создалась строка: %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BA%D0%B0%D0%BA%20%D0%B4%D0%B5%D0%BB%D0%B0
    Ессно если ее подставить в Operу или FF она преобразуется в вид Привет%20как%20дела (они utf-8 передают)

    пишу URL http://somehost/content/Привет%20как%20дела/

    последняя строка Привет%20как%20дела через mod_rewrite передается в скрипт через url (GET переменная header)


    echo $_GET['header'] = iconv('UTF-8', 'cp1251', $_GET['header']);


    Вывод скрипта:

    Notice: iconv() [function.iconv]: Detected an illegal character in input string in Z:\home\localhost\www\content\index.php on line 3
    ??N??????


    Где то Апач косячит кодировку, только вот не пойму где…
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 13:07, спустя 39 минут 27 секунд




    Как узнать кодировку, в которой отдает сервер?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 13:51, спустя 44 минуты 15 секунд





    Как узнать кодировку, в которой отдает сервер?
    методом тыка :)
    Сапожник без сапог
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2009 г. 14:17, спустя 25 минут 49 секунд

    Содержательный ответ…
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 14:25, спустя 7 минут 55 секунд

    методом научного тыка!
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!