Pull to refresh
1
0

mod_rewrite — просто о сложном

Reading time 4 min
Views 63K

Что это такое?


mod_rewrite — это модуль для веб-сервера Apache, предназначенный для преобразования URL-ов. Модуль использует в своей работе правила, которые могут быть описаны как в конфигурации сервера (httpd.conf), так и в файлах .htaccess непосредственно в файловой структуре Вашего сайта. Правила описываются в виде регулярных выражений PCRE

Hello world


Простейший пример. Допустим, Вы захотели, чтобы никто не знал, что Ваш сайт написан на PHP и решили замаскировать расширения файлов. Можно, конечно, внести соответствующую директиву в конфигурацию Apache и тогда все файлы с расширением ".msl" («My Super Language») будут обрабатываться интерпретатором PHP. Но можно поступить проще:
создаем в корне нашего сайта файл .htaccess со следующим содержимым
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)\.msl$ $1.php [QSA,L]


Первая директива включает механизм mod_rewrite в текущей папке и во всех ее подпапках. Вторая указывает модулю mod_rewrite, что текущая папка в файловой системе соответствует корню сайта. Третья — непосредственно правило преобразования URL.

Прочесть его можно так:
Если сразу после начала строки ("^") идет произвольное количество любых символов ( "(.*)" ), причем мы хотим запомнить, что именно это за символы, окружая их скобками, затем идет точка ("\.") (экранируем точку, потому что одиночная точка — это просто любой символ), затем символы «msl» и на этом строка заканчивается ("$"), то заменим исходный URL на следующий: возьмем первую запомненную подстроку в скобках из правила, прибавим к ней ".php", добавим все дополнительные параметры адреса, которые могли быть "[QSA]" и на этом закончим, не будем применять дальнейшие преобразования, если они есть "[L]"

Все, теперь Вы можете смело менять все ссылки, заканчивающиеся на ".php" на ".msl" и писать в своем блоге, что изобрели новый скриптовый язык. Apache, встретив ссылку на «index.msl» с помощью mod_rewrite на лету преобразует ее в «index.php» и вызовет нужный скрипт.

А что еще умеет mod_rewrite?


Читать дальше →
Total votes 45: ↑33 and ↓12 +21
Comments 12

Rails 2.3.5 + mod_rails + MAMP на OSX Tiger

Reading time 3 min
Views 606
Странно но я не нашел в сети ни одного внятного мануала по установке на OS X рельсов с mod_rails — нового (относительно) модуля для Апача, избаляющего от головной боли при деплое. Все мануалы какие-то устаревшие, то Mongrel, то FastCGI. Как ни странно, в этом не оказалось ничего сложного — получился эдакий зомби из старых туториалов и пары новых действий.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Comments 6

Инфраструктура YouTube

Reading time 1 min
Views 999
image На этот раз под прицел моего желания что-либо перевести попала презентация Cuong Do — одного из основателей сервиса YouTube.
Презентация датируется 17.07.2008, но посмотреть ее всё равно будет интересно всем, так как там и кусочек технического бэкграунда и веселые истории из жизни сервиса. Квонг расскажет о том, как они выросли из маленькой неприметной компании в гиганта интерентов!
Но, конечно, основной упор презентации сделан на вопросы масштабируемости огромной инфраструктуры сервиса. В общем для выходных — самое то, приятного просмотра.

Перевод выполнялся на сервисе translated.by, при помощи транслейтед-юзера eeight, после чего перевод был направлен в Google, и теперь официально прикручен к видео канала GoogleDevelopers
Cубтитры включаются с помощью меню в правом нижнем углу (сразу после нажатия на play).

Total votes 38: ↑33 and ↓5 +28
Comments 11

В сентябре выйдет первый в мире печатный журнал с видеорекламой

Reading time 1 min
Views 523
В некоторых экземплярах американского печатного издания Entertainment Weekly — журнала о шоу-бизнесе, появится видеореклама. Малогабаритные экраны – размером с дисплей мобильного телефона – оснащены аккумуляторами. Принцип работы – такой же, как в «поющих» поздравительных открытках, технология недорогая и эффектная. Видео активируется в момент открытия журнала на странице с рекламой. Каждая микросхема способна вместить ролик продолжительностью до 40 минут. В пилотных клипах будет анонсироваться программа передач американского телеканала CBS и рекламироваться продукция компании Pepsi. А появятся они в номере, который выйдет 18 сентября в Лос-Анджелесе и Нью-Йорке. Предположительно, реклама, публикуемая таким способом, будет стоить гораздо дороже обычной печатной.

Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Comments 56

ИТ аутсорсинг для сегмента малых и средних предприятий — зачем он нужен?

Reading time 4 min
Views 2.4K
ИТ аутсорсинг для сегмента малых и средних предприятий — зачем он нужен?
Введение

Уважаемые читатели, для начала разберём само понятие «аутсорсинг»:
Aутсо́рсинг (от англ. outsourcing: внешний источник) — передача организацией определённых бизнес-процессов или производственных функций на обслуживание другой компании, специализирующейся в соответствующей области.
Определение очень большое и ёмкое, но хочется отметить, что мы часто пользуемся благами аутсорсинга, сами о том не ведая.
Приведём наиболее яркий пример «ИТ-аутсорсинга» — это хостинг сайта компании. Теперь, когда вы поняли, что аутсорсинг уже прочно вошел в нашу повседневную жизнь, давайте более подробно рассмотрим какие цели мы преследуем, обращаясь к услугам «аусорсеров».
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Comments 58

Нестандартное использование услуги Multifon в «железном» варианте

Reading time 2 min
Views 5.6K
С подключением новой услуги Multifon от Мегафона стало возможным принимать и совершать звонки не только на мобильный телефон, но и на различные интернет устройства с поддержкой протокола SIP, о чем уже писали уважаемые Хабровчане.
Но мы решили протестировать данную услугу не с программами для SIP телефонии, а с «железным» устройством. И в качестве подопытного устройства была выбрана относительно новая модель телефона от компании Cisco со звучным названием iPhone или WIP310-G2.

Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Comments 8

Обзор CMS по категориям

Reading time 19 min
Views 84K
В мире существуют тысячи CMS для самых разных целей, самого разного качества, самой разной перспективы, стоимости, распространённости и так далее. Серьёзно опробовать их все — нереально. Поэтому когда я только знакомился с миром движков для сайтов, выбирать приходилось наугад. Ниже я опишу свои впечатления от знакомства с теми или иными движками для тех или иных целей. К некоторым приложу краткое описание особенностей, впечатление о прочих состоит только из заглядывания в админку. Заметки эти составлялись и редактировались в течении долгого времени, но сейчас я решил, что лучше опубликовать их в нынешнем виде, чем ещё полгода-год по чуть-чуть редактировать не добавляя ничего принципиально нового.
Преимущество отдаётся бесплатным движкам. Платные будут рассматриваться только для сравнения или от безысходности, т.е. если нет бесплатных аналогов. Также ограничение на технологии: php. О движках на перле и питоне я не более чем слышал, на шарпе и джаве имел дело с самописными.
Итак, рассматриваются
Читать дальше →
Total votes 197: ↑163 and ↓34 +129
Comments 215

Обеспечение качества программного продукта

Reading time 4 min
Views 11K
Дисциплина «Метрология программного обеспечения» входит в учебный план подготовки дипломированных специалистов по направлению 654600 — «Информатика и вычислительная техника» по специальности 220400 — «Программное обеспечение вычислительной техники и автоматизированных систем». Дисциплина изучает проблемы оценки метрических характеристик качества ПО на этапах от разработки спецификаций до завершения отладки и тестирования программного продукта. В курсе рассматриваются критерии, характеристики и метрики качества ПО; особый упор делается на характеристики корректности, надежности и сложности программ. Изучаются формальные модели и методы оценки как статических, так и динамических характеристик качества ПО, позволяющие на различных стадиях разработки выявлять просчеты и дефекты программного изделия. Рассматриваются инструментальные средства поддержки и автоматизации измерения характеристик ПО.
Далее по тексту будет находится краткий обзор инструментов с помощью которых можно анализировать различные характиристики в приложениях созданных на PHP. Данный материал появился на свет в результате некоторых экспериментов в области непрерывной интеграции, и должен был являться частью статьи про непрерывную интеграцию (спойлерить пока не буду, боюсь сглазить) все в том же РНР, но я решил все-таки выделить его в самостоятельный обзор, так как возможно, в последующих статьях я буду ссылаться на него, а так же надеюсь узнать об аналогичных инструментах еще не попавших мне на глаза. Некоторые инструменты уже были рассмотрены достаточно подробно, но тем не менее полного списка всех доступных еще не было.
Читать дальше →
Total votes 127: ↑115 and ↓12 +103
Comments 43

Особенности работы и настройки DHCP на маршрутизаторах Cisco (Часть 2)

Reading time 3 min
Views 189K
Статья является продолжением предыдущей статьи, посвященной базовой настройке DHCP на маршрутизаторе Cisco. В этой статье я хочу рассмотреть конфигурацию и настройку централизованного сервера DHCP и агентов DHCP-Relay
читать дальше
Total votes 9: ↑7 and ↓2 +5
Comments 12

ООП с примерами (часть 1)

Reading time 4 min
Views 603K
Волею судьбы мне приходится читать спецкурс по паттернам проектирования в вузе. Спецкурс обязательный, поэтому, студенты попадают ко мне самые разные. Конечно, есть среди них и практикующие программисты. Но, к сожалению, большинство испытывают затруднения даже с пониманием основных терминов ООП.

Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).

Первая часть, представленная ниже, посвящена классам, объектам и интерфейсам.
Вторая часть иллюстрирует инкапсуляцию, полиморфизм и наследование

Читать дальше →
Total votes 85: ↑64 and ↓21 +43
Comments 67

ООП с примерами (часть 2)

Reading time 5 min
Views 673K
Волею судьбы мне приходится читать спецкурс по паттернам проектирования в вузе. Спецкурс обязательный, поэтому, студенты попадают ко мне самые разные. Конечно, есть среди них и практикующие программисты. Но, к сожалению, большинство испытывают затруднения даже с пониманием основных терминов ООП.

Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).

Первая часть посвящена классам, объектам и интерфейсам.
Вторая часть, представленная ниже, иллюстрирует инкапсуляцию, полиморфизм и наследование

Читать дальше →
Total votes 50: ↑37 and ↓13 +24
Comments 37

Список полезных PHP классов и библиотек

Reading time 4 min
Views 64K

Email


  • Swift Mailer
    Swift Mailer легко интегрируется в любое PHP-приложение. Это гибкий и элегантный ООП-подход к отправке писем с множеством функций: отправка эл.почты, используя SMTP, SendMail, Postfix, поддержка серверов и др.
  • PHPMailer
    Лучший класс для работы с эл. почтой. Поддерживает сообщения в цифровой форме, S/MIME шифрование, текстовые и HTML-письма, изображения, поддерживает несколько Email’ов, SMTP-аутентификация.

Читать дальше →
Total votes 175: ↑145 and ↓30 +115
Comments 75

Редирект после POST запроса

Reading time 2 min
Views 47K
Каждый веб-разработчик знает, что после POST сабмита формы желательно сделать редирект, чтобы предотвратить повторную отправку данных, когда пользователь захочет обновить страницу. В основном это критически необходимая операция, так как данные формы могут сохраняться в базе данных или участвовать в платёжной транзакции. И тогда данные не только продублируются, но и спишутся лишние деньги.

Но речь не о деньгах, а о правильном редиректе…
Читать дальше →
Total votes 102: ↑86 and ↓16 +70
Comments 79

LDAP. Настройка отказоустойчивого LDAP сервера

Reading time 12 min
Views 207K
The Internet Engineering Task Force (IETF)В этой статье я расскажу вам о сервере службы каталогов 389 Directory Server (он же Fedora Directory Server, он же Redhat Directory Server). Так уж повелось, что для доступа к серверу каталогов используется протокол LDAP. Если вы не работали с LDAP, я очень рекомендую ознакомиться со статьями в Wikipedia (тут про cлужбу каталогов, а тут про протокол LDAP).

Итак, сначала кратко о том, зачем же вообще использовать сервер службы каталогов (далее — LDAP-сервер). LDAP-сервера, в основном, применяются для централизованного хранения учетных записей, и всего, что с ними связано. LDAP-сервер представляет собой иерархическую БД, а значит в нем можно хранить любые данные.

Казалось бы, вполне логичен вопрос: а почему именно LDAP? Что мешает хранить учетные записи в MySQL или PostgreSQL? Ответ очевиден — ничего =)

Но над любой RDBMS служба каталогов обладает целым рядом преимуществ:

  • Это стандарт. Многие приложения поддерживают аутентификацию/авторизацию через LDAP;
  • Данные хранятся как иерархическое дерево, что позволяет делать эффективные операции поиска, выделив нужную часть дерева;
  • Число операций чтения в тысячи раз превышают число операций записи, в связи с этим появляется огромное число плюсов: нет необходимости применения транзакций и rollback'ов, репликация работает без проблем, которые присущи RDBMS;
  • Приложение должно видеть одну и ту же информацию на всех серверах службы каталогов, если сервер не хранит информацию, нужную клиентскому приложению, он может сам запросить ее у другого сервера или перенаправить само приложение к другому серверу;
  • Из-за описанных выше свойств службы каталогов, этот сервис отлично масштабируется горизонтально.


Выбор сервера службы каталогов пал на 389 Directory Server. История этого LDAP сервера тесно связана с компанией Netscape (если интересно, почитать историю можно тут).

Читать дальше →
Total votes 68: ↑60 and ↓8 +52
Comments 44

Простой и эффективный метод отразить http DDoS от 50мбит с помощью nginx и iptables

Reading time 7 min
Views 66K
Здравствуй, Хабр!
Предлагаю твоему вниманию простой и в то же время эффективный метод борьбы с http DDoS. На основе сервера Xeon 2.5GHz / 4Gb RAM / SAS можно отражать атаку примерно до 300 Мбит/с (значение получено методом экстраполяции).

Способ реализация

Производится тонкая настройка параметров системы. Так что север будет способен выдерживать больше подключений от ботнета, чем канал до сервера сможет пропустить.

Область применения

Борьба с Http DDoS на выделенном сервере или ВПС. Максимальная возможная мощность сдерживания DDoS атаки ограничивается физическими возможностями сервера и пропускной способностью канала.

SEO под DDoS-ом

Ваш сайт будет правильно индексироваться во время атаки, что позволит сохранить позиции в выдаче поисковых систем. Особенно актуально для сайтов с большими SEO бюджетами.

Стоимость и эффективность

На время атаки придется отказаться от некоторых сервисов вашего сайта. Возможно, придется расширить полосу канала, перенести сайт на более мощный сервер. Эффективность достигается максимизацией коэффициента масштабируемости системы. Обеспечивается быстрое наращивание аппаратных ресурсов при увеличении мощности атаки.
Читать дальше →
Total votes 193: ↑179 and ↓14 +165
Comments 78

GPFS. Часть 2. Эксплуатация GPFS кластера

Reading time 18 min
Views 14K
IBM GPFSВ продолжение моего предыдущего поста о настройке GPFS-кластера, как и обещал, перехожу к описанию весьма распространённых ситуаций, с которыми можно столкнуться при работе с GPFS.




Читать дальше →
Total votes 46: ↑39 and ↓7 +32
Comments 10

Sedge — приложение для автоматизированного создания отчетов об ошибках

Reading time 5 min
Views 1.8K

Небольшое лирическое отступление


Так получилось, что в последнее время я занимаюсь разработкой программ работающих в связке с различным оборудованием. На прошлой работе это были роботы и станции тестирования для полупроводниковой промышленности, на текущей – масс-спектрометры для химии и медицины. Казалось бы, совершенно различные отрасли и назначение программ, но с точки зрения разработчика есть много общих моментов.

Типичную конфигурацию, с которой мы работаем, можно описать так: станция, к которой присоединен клиентский компьютер. На компьютере установлено базовое приложение, взаимодействующее с оборудованием и предоставляющее интерфейсы для сбора данных. Этими интерфейсами пользуется десяток вертикальных приложений, необходимых для решения конкретных задач пользователя. Для решения одной задачи обычно необходимо взаимодействие двух-трех приложений. Весь этот набор приложений зависит от многочисленных конфигурационных файлов и генерирует большой объем отчетов и данных.

Это длинное вступление было необходимо для того, что бы объяснить, почему когда в системе происходит ошибка, для ее локализации нам важно как можно точнее знать состояние системы. Отчет об ошибке может включать несколько десятков файлов – логи, конфигурационные фалы, файлы данных и проектов. Объяснять пользователю, по телефону, как все это собрать – не самое приятное занятие.

Если вы находитесь в похожей ситуации, то вам может пригодиться программа для автоматизации создания отчетов об ошибках – Sedge. С ее помощью вы можете опросить пользователя о произошедшей ошибке, автоматически сформировать отчет, включающий пользовательскую информацию, данные о системе, все необходимые файлы, упаковать и отправить его.
Читать дальше →
Total votes 12: ↑7 and ↓5 +2
Comments 0

Linux, безопасность и все такое… (вдогонку)

Reading time 2 min
Views 13K
Навеяло вот этим топиком. Автор задал правильные вопросы, но к сожалению не дал правильных ответов.
На самом деле это общая грустная тенденция. Почему-то все свято уверены, что раз вирусов под линуксом нету, то и безопасность сама собой обеспечивается. Понимание ошибочности этого взгляда приходит зачастую слишком поздно, когда ты уже хакнут, причем еще неизвестно, какой из описанных в комментах случаев хуже — хакнутый корпоративный сервер или установленная любимым сыном дома маме десктопная убунта.
Давайте глянем, как можно обезопасить себя от всякой фигни.
Дальше
Total votes 137: ↑116 and ↓21 +95
Comments 81

Горячая замена кода (code hot swapping) в РНР

Reading time 10 min
Views 3K
Погода за окном просто требует чего-то горяченького, поэтому воспользовавшись возможностью что-то по исследовать в свободное время, я решил подумать — а можно ли не останавливая скрипт, подменить функцию, которая выполняется? С таким требованием я встретился чуть ранее, при разработке нашего стартапа. У нас был один из внутренних серверов, который заведовал всеми действиями между пользователями в реальном времени. Это обычный РНР-демон-роутер, который обрабатывал запросы от клиентских запросов (внутри сервера), но была одна сложность — в случае, когда я что-либо изменял в коде сервера или обработчиков отдельных команд, демон приходилось перезагружать, что означало отключение текущих клиентов и потеря информации о состоянии сервера (этот вопрос решаемый, конечно). То же самое было в случае ошибки в коде — все подключенные пользователи сразу это чувствовали на себе (хорошо, что все они такие же разработчики, а не реальные клиенты). Можно ли этого избежать?

Конечно можно, например, отказавшись от скриптов-демонов, как мы и сделали. Однако это проблему не сняло, просто переместило ее в другую плоскость. Ведь остались другие сервисы-демоны, которые также должны работать непрерывно, хоть их значимость меньше, однако перезагружать каждый раз не очень то хочется. Поэтому решил я поискать возможность на лету подключать новый код и сразу его исполнять. Минимальным кодом будет функция, но вполне возможно подключать и методы классов.
Читать дальше →
Total votes 38: ↑27 and ↓11 +16
Comments 59
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity