логин: 
<< предыдущая заметкаследующая заметка >>
21 декабря 2012
Нужен ваш совет по .htaccess

Мне нужно, чтобы в .htaccess были запрещены любые прямые вызовы _существующих_ файлов через домен x.lleo.me. Например:

lleo.me/blog/papka/files/file.htm — разрешено
vasya.lleo.me/blog/papka/files/file.htm — разрешено
x.lleo.me/blog/papka/files/file.htm — ЗАПРЕЩЕНО
vasya.x.lleo.me/blog/papka/files/file.htm — ЗАПРЕЩЕНО

Это все относится к физическим файлам, все виртуальные файлы обрабатывает сам движок, потому что сейчас в .htaccess прописано так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php

К сожалению, у меня мало опыта в конструировании правил .htaccess, поэтому прошу помощи.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
Windows Opera
0
0
lleo.me/[email protected] Vlasov
У меня опыта тоже не сильно много, но, вроде бы, должно быть что-то такое:

RewriteCond %{HTTP_HOST} x.lleo.ru$
RewriteRule (.*) - [F]
Linux Firefox
 Москва
0
0
Leonid Kaganov
По идее мне нужно что-то типа такого:

RewriteCond %{HTTP_HOST} ^x.* [NC,OR]
RewriteCond %{HTTP_HOST} ^www.x.* [NC]
RewriteCond %{REQUEST_FILENAME} !=/ajax/*.php$ [NC]
RewriteRule ^.*$ http://natribu.org [R=301,L]

То есть, если хост x.--- или www.x.---, и при этом запрашиваемое имя не /ajax/[a-z]+.php, то запретить.
Проще говоря, запретить для домена x. запрашивать любые файлы, кроме одной лишь папки /ajax/

Но вот почему-то пока не работает. То ли написал неверно, то ли там кэш заседает всякий раз минут на десять и не дает отлаживать.
Windows Opera
0
0
lleo.me/[email protected] Vlasov
Насколько я понимаю, в данной схеме неправильно написано третье правило. Если используется точное сравнение ("=" или "!="), то звёздочка не считается мета-символом. Соответственно, правило надо переписать примерно так:
RewriteCond %{REQUEST_FILENAME} !/ajax/.+\.php$ [NC]
Ну или так, если имена PHP-скриптов состоят только из букв:
RewriteCond %{REQUEST_FILENAME} !/ajax/[a-z]+\.php$ [NC]

Ещё сильные сомнения вызывает комбинация [OR]: первые два правила идут через "или", а следующее — через "и". Но с каким приоритетом? В документации Апача я этого не нашёл. Может быть и так, что первое правило комбинируется с комбинацией из второго+третьего, а это уже совсем не то, что надо.

Я бы попробовал начать с простых комбинаций, и только убедившись, что они работают, как ожидается, переходил к более сложным. Скажем, для начала оставить только первые два условия (на "иксовость" домена), проверить, сработала ли запрещалка. Потом отдельно только третье условие, сначала положительное (без восклицательного знака), затем отрицательное. Ну а после этого уже выяснять, как правильно комбинировать правила через AND и OR. Возможно, придётся переставить правила местами, чтобы корректно сработал порядок операций, или даже продублировать одно из правил, если у AND более высокий приоритет, не зависящий от порядка правил. Скобок-то для группировки операций тут не предусмотрено…

Кстати, следить за процессом обработки правил можно при помощи обычного логирования, LogLevel (или RewriteLog, если используются старые версии). На сайте официальной документации ("http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html") приведён пример, как добавить нужный уровень детализации.
Linux Firefox
 Москва
0
0
Leonid Kaganov
я вышел из положения иначе, написал так:

RewriteCond %{HTTP_HOST} ^(www\.)?x\.* [NC]
RewriteCond %{REQUEST_URI} /userdata/ [NC]
RewriteRule ^.*$ http://natribu.org/?xss=http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

и это то, что мне надо
Windows Firefox
0
0
[email protected] (paet.net)
Спасибо, Леонид! Понадобилось похожее решение (на одном из субдоменов висит простенький сайт, принадлежащий не владельцу основного домена) - Ваш способ подошёл.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Но вы учтите, что мой способ распространяется только на папку /userdata/ - по архитектуре движка именно в ней лежат файлы, создаваемые пользователями (а значит, потенциально способные своровать куки из области видимости домена "x" - а там я храню системную авторизацию).
<< предыдущая заметка следующая заметка >>