Автор Тема: Apache 2.4 - htaccess  (Прочетена 3889 пъти)

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Apache 2.4 - htaccess
« -: Nov 26, 2015, 10:45 »
Здравейте, не мога да се справя с апаче 2.4 на дебиан. Искам да включа htaccess за основния виртуален хост (/var/www). Conf файла вече се казва 000-default.conf, вместо default.conf. Направих неговото съдържание следното:

Код:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www

<Directory /var/www>
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Добавил съм следния .htaccess в /var/www:

Код:
order deny, allow
deny from all

Все още ме пуска там ..  ::) Идеята ми е да забраня, когато се напише IP адреса на машината в браузъра, да отваря /var/www. Ако имате и други предложения, ще съм ви благодарен.

Също така в /etc/apache2/apache2.conf съм направил следната промяна:

Код:
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>


Благодаря предварително.
« Последна редакция: Nov 26, 2015, 10:47 от globaluty »
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #1 -: Nov 26, 2015, 12:04 »
аз съм го правил това когато се напише http://192.168.1.2 или друго публичното ип на сървера да отвори страница и да каже че няма такава страница. затова трябва да имаш 2 виртуални хоста 1.вият за ИП-то а вторият за реалната страница/домейна.

това съм си записал:
 1-вият VHost е дефаул когато не е намерен друг матч VHost
# когато има зададена директива  NameVirtualHost xxx.xxx.xxx.xxx, апачито обшожда само vho
st-овете.
# той е дефоулт за http://93.184.216.34/ и за всички хостове които са зададени (ресолват се) в DNS, но
за които наяма зададен съответен virtualhost.
------- например трябва да стане така:

NameVirtualHost 93.184.216.34
NameVirtualHost 192.168.1.2

<VirtualHost  93.184.216.34 192.168.1.2>
    ServerName error.example.net
    DocumentRoot /home/NotFound
    ErrorLog logs/NotFound.net-error_log
    CustomLog logs/NotFound.net-access_log common
</VirtualHost>


<VirtualHost  93.184.216.34 192.168.1.2>
    ServerName http://www.example.com
    DocumentRoot .................
   .......
</VirtualHost>

като в DNS-а http://www.example.com е описан а error.example.net НЕ Е описан.
сега като апачито не може да намери виртуалнен хост който да обслужи той сервира първият виртуален хост в конфиг файла- а това е виртуал хоста за чистото IP. А ти в  DocumentRoot /home/NotFound ще сложиш една страница със ледното съдържание: "Педал я се махай оттука, що набираш ип-та!!!!"



--------------PS след това в конфига който си написал има противоречие
<Directory /var/www>
      AllowOverride All
      Order allow,deny
      allow from all
</Directory>

а пък в .htaccess за  /var/www
order deny, allow
deny from all

първо му казваш в конфига allow from all а след това в .htaccess казваш deny from all
Не знам кое ще е с приоритет.
По принцип няма разлика между директивите в http.conf и .htaccess
разликата е само че http.conf се чете един път при старт на апачито (и затова при всяка промяна на http.conf апачито трябва да се рестартира)
, а .htaccess се чете всеки път при обслужване на директорията и затова няма нужда от рестарт. това дава голям overload. .htaccess  са го измислили заради хостигите. За да не бара юзерите по апачито а само да си бутат конфиг фалове по директориите.

Съветвам те да ползваш или само едното или само другото.



« Последна редакция: Nov 26, 2015, 12:37 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #2 -: Nov 26, 2015, 15:22 »
Мда, всъщност проблемът беше в това, че на дефаулт хоста съм му задал all from all. Оказа се, че той е с приоритет.

AllowOverride All не означава ли, че дори да съм задал в случая на дефаулт хоста all from all, щом задам в определената директория deny from all с .htaccess, то то ще чете от .htaccess файла  ::)

И вторият ми въпрос е как да огранича правата само в текущата директория, sub-директориите да не се закачат ?
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #3 -: Nov 26, 2015, 15:58 »
AllowOverride All не означава ли, че дори да съм задал в случая на дефаулт хоста all from all, щом задам в определената директория deny from all с .htaccess, то то ще чете от .htaccess файла  ::)

ДА  би трябвало да означава.

AllowOverride означава  Allow-позволи  Override-презапис,пренаписване отгоре
на всички директиви - ALL, които са декларирирани в  httpd.conf <directory>
http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride
Цитат
When the server finds an .htaccess file (as specified by AccessFileName), it needs to know which directives declared in that file can override earlier configuration directives.
Цитат
When this directive is set to All, then any directive which has the .htaccess Context is allowed in .htaccess files.

в случая понеже използваш само allow и deny въпросната директива
би трябвало да е еквивалента на

AllowOverride Limit
Цитат
Limit
    Allow use of the directives controlling host access (Allow, Deny and Order).

 .htaccess всъщност са малки конфиг файлове, части от големия, но само за някоя директория, които Override-ват големия конфиг. Обаче са позволени само директиви и опции, които имат смисъл за директории. Например не можеш да ползваш в .htaccess опции, които работят само по УРЛ-а. например не можеш да ползваш <location>
« Последна редакция: Nov 26, 2015, 16:11 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #4 -: Nov 26, 2015, 16:19 »
Направих следното. Създал съм нов хост и съм записал следното:

Код:
DocumentRoot /var/www/web
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/web>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
order allow,deny
deny from all
</Directory>

В директория /var/www/web/subweb съм поставил файл .htaccess със следното съдържание:

order allow,deny
allow from all

По моята логика, трябва да те пуска в subweb и да не те пуска в web.
И в двете НЕ те пуска обаче.

Естествено влизам си с URL-a, който съм задал във виртуалния хост.
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #5 -: Nov 26, 2015, 16:36 »
 .htaccess с какви пермишъни е? Дали изобщо го чете? направи го на 777

но ми се струва че проблема е друг.
след като си му забранил да влиза в  /var/www/web/ как ще влезе вътре и ще прочете subweb/ дирекорията --- и съответно няма да изпълни .htaccess-а


пробвай така без  .htaccess
Код:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/web>
Options Indexes FollowSymLinks MultiViews

order allow,deny
deny from all
</Directory>
       <Directory /var/www/web/subweb>
Options Indexes FollowSymLinks MultiViews

order allow,deny
                allow from all
</Directory>


Активен

Perl - the only language that looks the same before and after encryption.

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #6 -: Nov 26, 2015, 16:41 »
Така работи, но идеята ми е само в основната директория да няма достъп никой. Във всички останали да има, за да не се налага всеки път да едитвам conf файла на хоста  ::)
Активен

Bogo

  • Напреднали
  • *****
  • Публикации: 632
  • Distribution: Debian
  • Window Manager: cmd
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #7 -: Nov 26, 2015, 20:30 »
Изтрий 000-default.conf, default.conf или ги премеси в /etc/apache2/sites-available и рестартирай
и никой няма да има достъп до /var/www

после си направи файл /etc/apache2/sites-enabled/www_one.conf
на който document root е /var/www/www_one

после си направи файл /etc/apache2/sites-enabled/www_two.conf
на който document root е /var/www/www_two

и така нататък
« Последна редакция: Nov 26, 2015, 20:38 от Bogo »
Активен

live free or die хард :)

Ali Nebi

  • Напреднали
  • *****
  • Публикации: 394
  • Distribution: Centos, Debian, Fedora, Ubuntu
  • Window Manager: Gnome
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #8 -: Nov 29, 2015, 21:46 »
Здравей,

обърни внимание и на това, че в apache 2.4 вече е следният формат:

Require all granted
Require host ...
Require ip ....

https://httpd.apache.org/docs/2.4/howto/access.html

Има модул, който позволява поддръжка на стария формат и в дебиан мисля, че беше пуснат по подразбиране, така че и старият формат би трябвало да работи.
Активен

Не се задоволявай да бъдеш дим, когато можеш да бъдеш огън!

Ali Nebi

  • Напреднали
  • *****
  • Публикации: 394
  • Distribution: Centos, Debian, Fedora, Ubuntu
  • Window Manager: Gnome
    • Профил
Re: Apache 2.4 - htaccess
« Отговор #9 -: Nov 29, 2015, 21:50 »
П.С. Това, което искаш може лесно да се направи и с mod_rewrite, така ще блокираш достъпа само ако се извиква по IP:

Примерно
RewriteEngine On

RewriteCond %{HTTP_HOST} ^xxx\.xxx\.xxx\.xxx
RewriteRule .* - [F]

Активен

Не се задоволявай да бъдеш дим, когато можеш да бъдеш огън!