Как я могу отредактировать файл .htaccess, чтобы запретить горячие ссылки на файлы .css, .inc? - PullRequest
4 голосов
/ 12 марта 2009

Мои функции находятся в файле с именем functions.inc на моем веб-сайте. Как я могу отредактировать файл .htaccess, чтобы запретить пользователям просматривать его, перейдя непосредственно к http://example.com/functions.inc

Ответы [ 3 ]

3 голосов
/ 12 марта 2009
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

Полезно, если у вас не установлен mod_rewrite.

2 голосов
/ 12 марта 2009

Я использую mod_rewrite для этого. К изображениям и т. Д. К стандарту относятся:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://myhostname\.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|js|css)$ - [F]

Вы можете добавить "inc" в этот список расширений в последнем правиле.

Но для предотвращения доступа к определенным типам файлов я предпочитаю что-то вроде:

RewriteCond %{THE_REQUEST} ^\w+\ /include/ [OR]
RewriteCond %{THE_REQUEST} \.php\ HTTP/
RewriteRule ^.*$ - [R=404,L]

Это делает две вещи:

  1. Первое правило исключает доступ к каталогу / include из внешних запросов, но вы все равно можете включить / потребовать их; и
  2. Второе правило ограничивает доступ к именам файлов, заканчивающимся на .php. Вы можете использовать то же самое для файлов .inc.

В обоих случаях Apache выдаст ошибку 404 (файл не найден), что, на мой взгляд, лучше. Обычно лучше сказать, что чего-то не существует (что вы не хотите, чтобы люди видели), чем говорить, что это есть, но вы не можете получить к нему доступ. Но это только личное мнение.

Что касается того, почему я ограничиваю файлы .php от прямого доступа: я использую mod_rewrite для создания «хороших» URL. Вместо:

/account/order.php

это:

/account/order

Есть много причин для этого. Эстетика одна. SEO - это другое (если вместо /account/order.php?item=123 у вас есть /account/order/123).

0 голосов
/ 12 марта 2009

Я предпочитаю маскировать файлы, а не просто запрещать доступ к ним. Таким образом, я предпочитаю решение mod_rewrite отвечать кодом состояния 404 (начиная с Apache 2.2), как уже упоминалось выше. Но я бы также использовал запасной вариант, если mod_rewrite недоступен, как упоминал Байрон.

Итак, давайте объединим оба:

<IfModule mod_rewrite.c>
    RewriteEngine on
    # .inc files
    RewriteRule \.inc(/|$) - [L,R=404]
    # URI paths starting with /include/
    RewriteRule ^include/ - [L,R=404]
</IfModule>
<IfModule !mod_rewrite.c>
    <Files ~ "\.inc$">
        Order allow,deny
        Deny from all
    </Files>
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...