Вопрос или проблема
Я установил httpd
и php v8.2.11
на свою Linux Fedora.
Но Apache не может выполнять файлы .php
. (Ответы «Доступ запрещен». )
Я пытался использовать команду chmod
в терминале, чтобы разрешить выполнение, и добавил AddType text/html .php .phps
в файл httpd.conf
и перезапустил httpd.service
, но он все еще не может выполнить php-скрипты.
ПРИМЕЧАНИЕ: Я могу выполнять файлы .html
.
ПРИМЕЧАНИЕ: Я пробовал установить chmod
файлов php
на 777
(хотя я знаю, что это очень опасно), но он по-прежнему не может выполнить.
Вот что я нашел в журнале ошибок:
AH01071: Got error 'Unable to open primary script: /var/www/backend/index.php (Permission denied)'
Что я могу сделать сейчас?
Вам не нужно использовать “chmod 777”, измените разрешения на:
chmod 644 /var/www/backend/index.php
Убедитесь, что владелец и группа установлены на пользователя веб-сервера (обычно apache или www-data).
chown apache:apache /var/www/backend/index.php
Убедитесь, что директория, содержащая ваши PHP файлы, имеет правильные разрешения. Директория и ее родительские директории должны быть доступны для Apache.
chmod 755 /var/www/backend
Если вы используете SELinux на Fedora, он может применять дополнительные политики безопасности. Чтобы проверить контексты SELinux и исправить их, вы можете использовать команду ls -Z и команду chcon.
ls -Z /var/www/backend
chcon -R -t httpd_sys_content_t /var/www/backend
Убедитесь, что ваша конфигурация Apache позволяет выполнять PHP. В вашем конфигурационном файле Apache (httpd.conf или в включенном файле) должны быть следующие строки:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Убедитесь, что эти строки не закомментированы. Также убедитесь, что конфигурация вашего виртуального хоста (если она есть) включает директиву DirectoryIndex с «index.php».
Убедитесь, что модуль PHP загружен Apache. Вы можете проверить, загружен ли модуль php, используя:
apachectl -M
После внесения изменений в разрешения файлов и конфигурации перезапустите Apache, чтобы применить изменения.
systemctl restart httpd
Скорее всего, это проблема SELinux (неочевидная проблема, которая не возникает в других местах).
sudo chcon -R -t httpd_sys_rw_content_t /var/www/backend
Ответ или решение
Чтобы разрешить выполнение PHP файлов в Apache на Fedora, вам необходимо выполнить несколько шагов. Убедитесь, что вы следуете этому руководству последовательно, чтобы устранить проблему.
Шаг 1: Проверьте разрешения файлов
Ваши PHP файлы должны иметь правильные разрешения. Выполните следующие команды для установки соответствующих разрешений и владельцев:
-
Установите разрешения для файла
index.php
:chmod 644 /var/www/backend/index.php
-
Установите владельца и группу на веб-сервер (обычно это
apache
):chown apache:apache /var/www/backend/index.php
-
Проверьте и установите разрешения для директории
backend
:chmod 755 /var/www/backend
Шаг 2: Настройки SELinux
Если вы используете SELinux, это может быть причиной вашей проблемы. Проверьте контексты SELinux и установите их правильно:
-
Проверьте контексты SELinux для директории:
ls -Z /var/www/backend
-
Установите правильный контекст для директории:
chcon -R -t httpd_sys_content_t /var/www/backend
Если ваш PHP-код должен записывать данные (например, в файлы), используйте следующее:
sudo chcon -R -t httpd_sys_rw_content_t /var/www/backend
Шаг 3: Конфигурация Apache
Убедитесь, что у вас есть правильные настройки в конфигурационном файле Apache (httpd.conf
или в файлах виртуальных хостов):
-
Добавьте или проверьте наличие следующих строк:
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
-
Убедитесь, что директива
DirectoryIndex
включаетindex.php
:DirectoryIndex index.php index.html
Шаг 4: Проверьте загрузку модуля PHP
Убедитесь, что модуль PHP загружен. Для этого выполните:
apachectl -M | grep php
Если модуль не загружен, необходимо убедиться, что у вас установлены необходимые пакеты PHP и соответствующий модуль Apache.
Шаг 5: Перезапустите Apache
После изменения разрешений и конфигураций необходимо перезапустить Apache для применения изменений:
systemctl restart httpd
Итог
Теперь попробуйте снова получить доступ к вашему PHP файлу через браузер. Если вы следовали всем шагам и правильно настроили разрешения, конфигурацию Apache и SELinux, проблема с "Access denied" должна исчезнуть. Если ошибка продолжает возникать, проверьте журналы ошибок Apache для получения дополнительной информации, которая может помочь диагностировать проблему:
journalctl -xe
или
tail -f /var/log/httpd/error_log
Следуя этим шагам, вы должны успешно настроить выполнение PHP файлов на вашем сервере с Apache в Fedora.