Сервер не може прочитати файл htaccess, відмовляючи в безпечному доступі


81

Я створив простий додаток за допомогою AngularJS. Коли я намагався розмістити цей проект на своєму веб-сайті http://demo.gaurabdahal.com/recipefinder, він відображає таку помилку:

Заборонено

У вас немає дозволу на доступ / пошук рецептів на цьому сервері. Сервер не може прочитати файл htaccess, відмовляючи йому в безпеці

Але якщо я заходжу на http://demo.gaurabdahal.com/, на екрані відображається повідомлення "Заборонено доступ", яке я надрукував. Але чому він не може відкрити те, що AngularJS проектує "рецептор". Якщо я спробував помістити туди просту програму HTML, вона відкриється просто чудово.

Той самий проект AngularJS чудово працює, коли я розміщую його у github ( http://gaurabdahal.github.io/recipefinder )

Я не можу зрозуміти, що не так.



Навіть якщо я встановив для файлу дозвіл 777, він не працює.
Саураб

100
Щоразу, коли ти це робиш chmod 777, десь у світі кошеня помирає
Янос

1
Якщо це працювало раніше, і це відбувається просто несподівано, спробуйте спочатку перезапустити Apache. Більше немає кошенят смерті.
sglessard

Відповіді:


163

У мене теж була ця проблема. Моя порада - заглянути у файл журналу помилок сервера. Для мене це було те, що верхній каталог проекту не був читабельним. У журналі помилок це чітко зазначено. Простий

sudo chmod 755 <site_top_folder>

виправив це для мене.


Зважаючи на те, що шлях

10
У моєму випадку верхній каталог був встановлений на 750 (не знаю, чому), змінив його на 755 і він спрацював
Паоло

Це <site_top_folder>найважливіше. Ви повинні дати дозвіл на папку ROOT. Це спрацювало нормально. Дякую.
Chaminda Bandara

ЧОМУ -R??? Це також змінить дозвіл на всі файли ...
Чорний

24

Нікому не встановлюйте групу вашого загальнодоступного каталогу.


22

Це загальна проблема з хостинговим хостингом GoDaddy, коли ви відкриваєте новий веб-сайт.

Припускаючи, що у вас є SSH-доступ до сервера (його потрібно ввімкнути на cPanel), увійдіть у свій акаунт. Після успішного входу вас буде розміщено в домашньому каталозі вашого облікового запису. DocumentRoot для вашого веб-сайту знаходиться у підкаталозі public_html. GoDaddy за замовчуванням надає дозволи для цього каталогу на 750, але ці дозволи недостатні, щоб дозволити Apache читати файли для веб-сайту. Вам потрібно змінити дозволи для цього каталогу на 755 (chmod 755 public_html).

Скопіюйте файли вашого веб-сайту в каталог public_html (як scp, так і rsync працюють для копіювання файлів на сервер GoDaddy Linux).

Далі переконайтесь, що всі файли в public_html доступні для читання у всьому світі. Для цього скористайтеся цією командою:

cd public_html
chmod -R o+r *

Якщо у вас є інші підкаталоги (наприклад, css, js та img), переконайтеся, що вони доступні у всьому світі, увімкнувши як читання, так і виконання для світового доступу:

chmod o+rx css
chmod o+rx img
chmod o+rx js

Нарешті, вам потрібно буде мати файл .htaccess у файлі public_html. GoDaddy застосовує правило, яке забороняє завантажувати сайт, якщо у вашому каталозі public_html немає файлу .htaccess. Ви можете використовувати vi для створення цього файлу ("vi .htaccess"). Введіть у файл такі рядки:

Order allow,deny
Allow from all
Require all granted

Ця конфігурація буде працювати як для Apache 2.2, так і для Apache 2.4. Збережіть файл (ZZ), а потім переконайтеся, що файл має дозволи 644:

chmod 644 .htaccess

Працює як шарм.


2
впевнений chmod 644 .htaccess дуже важливий, інакше він не буде працювати! :)
lightup

17

Вам потрібно виконати ці команди в /var/www/html/будь-якому іншому каталозі, в якому знаходиться ваш проект:

sudo chgrp -R GROUP ./
sudo chown -R USER:GROUP ./
find ./ -type d -exec chmod 755 -R {} \;
find ./ -type f -exec chmod 644 {} \;

У моєму випадку (веб-сервер apache) я використовую www-dataдля USERіGROUP



6

Рішення для спільного сервера GoDaddy

У мене була та сама проблема, коли я намагався розгорнути окремий проект Laravel на рівні субдомену.

Структура файлу

- public_html (where the main web app resides)
    [works fine]

    - booking.mydomain.com (folder for separate Laravel project)
        [showing error 403 forbidden]

Рішення

  1. перейдіть до cPanel свого облікового запису GoDaddy

  2. відкрийте File Manager

  3. перейдіть до папки, в якій показано 403 заборонених помилок

  4. у Менеджері файлів клацніть правою кнопкою миші на папці (у моєму випадку booking.mydomain.com)

  5. виберіть Змінити дозволи

  6. встановіть наступні прапорці

     a) user - read, write, execute
     b) group - read, execute
     c) world - read, execute
    
     Permission code must display as 755
    
  7. Клацніть на зміну дозволів


4

У моєму випадку apache був якимось чином налаштований неправильно (?), Тому мені також довелося встановити дозволи для всіх батьківських каталогів. Просто встановлення дозволу на .htaccess (а це батьківський каталог) не спрацювало.


2

Що стосується Apache, що працює на Ubuntu, рішенням було перевірити журнал помилок, який показав, що помилка пов'язана з дозволом папки та файлу.

Спочатку перевірте журнал помилок Apache

nano /var/log/apache2/error.log

Потім встановіть дозвіл на виконання папки

sudo chmod 755 /var/www/html/

Також встановіть доступ до файлу для читання

sudo chmod 644 /var/www/html/.htaccess

1

Просто моє рішення. Я витягнув файл, мав незначні зміни та отримав помилку вище. Видалили все, завантажили та знову витягли, і звичайний бізнес.


1

У Linux,

find project_directory_name_here -type d -exec chmod 755 {} \;
find project_directory_name_here -type f -exec chmod 644 {} \;

Він замінить усі файли та дозволи на папки project_directory_name_hereта їх внутрішні матеріали.


0

У мене була така сама проблема з Fedora, і я виявив, що це проблема selinux. щоб перевірити, чи це проблема, запустіть команду: sudo setenforce 0

В іншому випадку або змініть файл / etc / sysconfig / selinux

SELINUX=enforcing
to
SELINUX=disabled

або додайте правила до selinux, щоб дозволити доступ до http


-1

Важливі моменти з мого досвіду:

  • кожен ресурс, до якого отримує доступ сервер, повинен знаходитись у виконуваному та читаному каталозі, отже, xx5у кожному chmod в інших відповідях.
  • більшу частину часу веб-сервер (у моєму випадку apache) не працює ні як користувач, ні в групі, яка володіє каталогом, тому знову xx5або chmod o+rxпотрібно.

Але більший висновок, який я дійшов, - це починати з малого і більше.

Наприклад, якщо http://myserver.com/sites/all/resources/assets/css/bootstrap.css видається помилка 403, подивіться, чи http://myserver.com/працює, тоді sites, тоді sites/all, тоді sites/all/resourcesтощо.

Це допоможе, якщо на вашому сервері ввімкнено індекси каталогів:

  • В Apache: Options +Indexes

Ця інструкція може також знаходитись у .htaccessпапці вашого веб-сервера public_html.


Оскільки питання вже було задано, я повідомлю тут, що раптом я отримую цю саму помилку в системі, яка працювала трохи тому. Згідно з повідомленням про помилку Apache2, він, мабуть, шукає файл .htaccess у / var / www, коли його там ніколи не було. У папці сайту є одна в / var / www / html та інші. Чому раптова помилка? Я працюю під Ubuntu 19.10.
ДонП

-1

У мене була та ж проблема на сервері швидкості після зміни версії php в cpanel. Виявилося, це також змінило дозволи для папки ... Я встановив дозвіл для папки на 755 за допомогою

chmod 755 folder_name

-9

"Сервер не може прочитати файл htaccess" означає саме це. Переконайтеся, що дозволи на ваш .htaccessфайл доступні для читання у всьому світі.


1
На хості Unix або Linux? chmod 644 .htaccess
200_success
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.