Установка PHP и модулей на Ubuntu/Debian

PHP

В Debian и Ubuntu есть несколько вариантов работы php: как модуль apache и как php-fpm. Первый вариант удобен тем, кому придется использовать не только сам PHP, но и возможности Apache, такие как .htaccess. Второй же вариат удобен например для Yii или Laravel.

Установка PHP 5 как модуля Apache:

apt-get update
apt-get install libapache2-mod-php5 php5-cli php5-memcache php5-memcached php5-mysql php5-pgsql php5-curl php5-gd php5-imagick php5-intl php5-mcrypt

Установка PHP 7 как модуля Apache:

apt-get update
apt-get install libapache2-mod-php7.0 php7.0-curl php7.0-cli php-memcache php-memcached php7.0-mysql php7.0-pgsql php7.0-gd php7.0-imagick php7.0-intl php7.0-mcrypt

Установка PHP 5 как PHP-FPM:

apt-get update
apt-get install php5-fpm php5-cli php5-memcache php5-memcached php5-mysql php5-pgsql php5-curl php5-gd php5-imagick php5-intl php5-mcrypt

Установка PHP 7 как PHP-FPM

apt-get update
apt-get install php7.
0-fpm php7.0-curl php7.0-cli php-memcache php-memcached php7.0-mysql php7.0-pgsql php7.0-gd php7.0-imagick php7.0-intl php7.0-mcrypt

Модули

В Debian и Ubuntu зачастую установка модулей PHP не требует каких-то сложных манипуляций. Для того, чтобы посмотреть, что Вы можете поставить прямо сейчас, нужно сделать:

lynx@lnxdsk:~$ apt-cache search php7.0
php-amqp - AMQP extension for PHP
php-apcu - APC User Cache for PHP
php-all-dev - package depending on all supported PHP development packages
php-gearman - PHP wrapper to libgearman
php-geoip - GeoIP module for PHP
php-gmagick - Provides a wrapper to the GraphicsMagick library
php-gnupg - PHP wrapper around the gpgme library
php-igbinary - igbinary PHP serializer
php-imagick - Provides a wrapper to the ImageMagick library
php-libsodium - PHP wrapper for the Sodium cryptographic library
php-mailparse - Email message manipulation for PHP
php-memcache - memcache extension module for PHP
php-memcached - memcached extension module for PHP, uses libmemcached
php-mongodb - MongoDB driver for PHP
php-msgpack - PHP extension for interfacing with MessagePack
php-oauth - OAuth 1.
0 consumer and provider extension php-http - PECL HTTP module for PHP Extended HTTP Support php-pinba - Pinba module for PHP php-propro - propro module for PHP php-radius - radius client library for PHP php-raphf - raphf module for PHP php-redis - PHP extension for interfacing with Redis php-rrd - PHP bindings to rrd tool system php-smbclient - PHP wrapper for libsmbclient php-solr - PHP extension for communicating with Apache Solr server php-ssh3 - Bindings for the libssh3 library php-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP php-uploadprogress - file upload progress tracking extension for PHP php-uuid - PHP UUID extension php-yac - YAC (Yet Another Cache) for PHP php-yaml - YAML-1.1 parser and emitter for PHP php-zmq - ZeroMQ messaging bindings for PHP php7.0 - server-side, HTML-embedded scripting language (metapackage) php7.0-bcmath - Bcmath module for PHP php7.0-bz2 - bzip2 module for PHP php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary) php7.
0-cli - command-line interpreter for the PHP scripting language php7.0-common - documentation, examples and common module for PHP php7.0-curl - CURL module for PHP php7.0-dba - DBA module for PHP php7.0-dev - Files for PHP7.0 module development php7.0-enchant - Enchant module for PHP php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) php7.0-gd - GD module for PHP php7.0-gmp - GMP module for PHP php7.0-imap - IMAP module for PHP php7.0-interbase - Interbase module for PHP php7.0-intl - Internationalisation module for PHP php7.0-json - JSON module for PHP php7.0-ldap - LDAP module for PHP php7.0-mbstring - MBSTRING module for PHP php7.0-mcrypt - libmcrypt module for PHP php7.0-mysql - MySQL module for PHP php7.0-odbc - ODBC module for PHP php7.0-opcache - Zend OpCache module for PHP php7.0-pgsql - PostgreSQL module for PHP php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary) php7.0-pspell - pspell module for PHP php7.0-readline - readline module for PHP php7.
0-recode - recode module for PHP php7.0-snmp - SNMP module for PHP php7.0-soap - SOAP module for PHP php7.0-sqlite3 - SQLite3 module for PHP php7.0-sybase - Sybase module for PHP php7.0-tidy - tidy module for PHP php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP php7.0-xmlrpc - XMLRPC-EPI module for PHP php7.0-xsl - XSL module for PHP (dummy) php7.0-zip - Zip module for PHP

Давайте для примера установим GD для работы с изображениями:

lynx@lnxdsk:~$ sudo apt-get install php7.0-gd
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Заметьте, вместо «php7.0-gd» выбирается «php-gd»
НОВЫЕ пакеты, которые будут установлены:
  php-gd
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 148 пакетов не обновлено.
Необходимо скачать 350 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 1 493 kB.
Пол:1 http://mirror.mephi.ru/debian stretch/main amd64 php-gd amd64 2.
5.0-1 [350 kB] Получено 350 kБ за 0с (2 266 kБ/c) Выбор ранее не выбранного пакета php-gd. (Чтение базы данных … на данный момент установлено 61175 файлов и каталогов.) Подготовка к распаковке …/php-gd_2.5.0-1_amd64.deb … Распаковывается php-xdebug (2.5.0-1) … Настраивается пакет php-xdebug (2.5.0-1) … После установки нам нужно перезапустить apache (эти примеры я показываю от пользователя root):
root@lnxdsk:~# service apache2 restart

Либо php-fpm, смотря, что используете Вы:

root@lnxdsk:~# service php7.0-fpm restart

Чтобы посмотреть список модулей php, который прямо сейчас подключен, можно запустить:

lynx@lnxdsk:~$ php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mhash
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pgsql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xdebug
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache

Как установить/обновить PHP 8.

1 на Debian 10 Buster

PHP 8.1 является значительным обновлением языка PHP, которое будет «официально» выпущено 25 ноября 2021 года. Это стандартное обновление, идущее вперед от существующей версии PHP 8.0 с новым PHP 8.1, которое включает перечисления, волокна, никогда не возвращаемый тип, окончательный константы классов, типы пересечений, свойства только для чтения среди длинного списка новых функций и изменений.

В следующем уроке вы узнаете как импортировать репозиторий Ondřej Surý и установить PHP 8.1 на рабочий стол или сервер Debian 10 Buster.

Содержание

1

Обновить систему Debian

Обновите свою Debian операционной системы, чтобы убедиться, что все существующие пакеты обновлены:

sudo apt update && sudo apt upgrade -y

Установить необходимые зависимости

Вам понадобится следующие пакеты установлен для этого учебника. Для установки выполните следующую команду:

sudo apt-get install ca-certificates apt-transport-https software-properties-common wget curl lsb-release -y

Обратите внимание: если вы не уверены, запустите команду независимо; это не повредит вашей системе.

Импорт PHP-репозитория Ондржея Сури

Первый шаг — импортировать и установить Ключ GPG и репозиторий это можно сделать с помощью автоматизированного сценария, инициированного командой curl. В вашем терминале используйте следующую команду.

curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x

Затем обновите список репозиториев APT, чтобы отразить изменения.

Реклама

sudo apt update

После выполнения команды обновления вы можете заметить, что некоторые пакеты требуют обновления, обязательно сделайте это, прежде чем продолжить.

sudo apt upgrade

Установите PHP 8.1 с опцией Apache

Если вы запустите HTTP-сервер Apache, ты можешь запустить PHP как модуль Apache or PHP-FPM.

Установить модуль Apache

Чтобы установить PHP 8 как модуль Apache, введите следующую команду.

sudo apt install php8.1 libapache2-mod-php8.1 -y

После завершения установки перезапустите сервер Apache, чтобы загрузить новый модуль PHP.

sudo systemctl restart apache2

Установите Apache с PHP-FPM

PHP-FPM (аббревиатура FastCGI Process Manager) чрезвычайно популярная альтернатива PHP (Обработчик гипертекста) Реализация FastCGI.

Чтобы установить PHP-FPM, используйте следующие команды.

sudo apt install php8.1-fpm libapache2-mod-fcgid

Обратите внимание, что по умолчанию PHP-FPM не включен для Apache. Вы должны включить его с помощью следующей команды.

sudo a2enmod proxy_fcgi setenvif && sudo a2enconf php8.1-fpm

Наконец, перезапустите Apache.

Реклама

sudo systemctl restart apache2

Убедитесь, что PHP-FPM работает:

sudo systemctl status php8. 1-fpm -y

Установите PHP 8.1 с опцией Nginx

Nginx не содержит собственной обработки PHP, как некоторые другие веб-серверы, такие как Apache. Вам нужно будет установить PHP-FPM «Менеджер процессов fastCGI» для обработки файлов PHP.

Сначала проверьте наличие обновлений в вашей системе и установите PHP-FPM, изначально установив необходимые пакеты PHP.

В вашем терминале используйте следующую команду для установки PHP 8.1 и PHP 8.1-FPM.

sudo apt install php8.1 php8.1-fpm php8.1-cli -y

После установки служба PHP-FPM должна быть запущена автоматически, если не выполнить следующую команду.

sudo systemctl enable php8.1-fpm --now

Вам нужно будет отредактировать блок сервера Nginx и добавить приведенный ниже пример для Nginx для обработки файлов PHP.

Ниже приведен пример для всех серверных блоков, обрабатывающих файлы PHP, которым требуется расположение ~ .php $ добавлен.

server {
 # … some other code
 location ~ .php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php8.1-fpm.sock;
 }

Протестируйте Nginx, чтобы убедиться, что у вас нет ошибок с настройками, внесенными с помощью приведенного выше кода; введите следующее.

Реклама

sudo nginx -t

Пример вывода:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите службу Nginx для завершения установки.

sudo systemctl restart nginx

В этом руководстве вы узнали, как установить PHP 8.1 и настроить его использование с Apache и Nginx. PHP 8.1 восхитителен. Однако в настоящий момент он все еще выходит из бета-версии и не считается стабильным, например 8.0 или старая стабильная версия 7.4, поэтому будьте осторожны, вы можете обнаружить, что многие из ваших любимых программ, таких как WordPress или плагины / темы для программного обеспечения CMS, могут конфликтовать.

пока разработчики не обновят.

Проведите небольшое исследование, подготовьтесь и установите PHP 7.4 или 8.0, готовые к замене, если при переключении что-то пойдет не так. Стабильные версии, такие как 8.0, все еще активно разрабатываются, и пакеты продвигаются одновременно с пакетами 8.1.

Преимущества и недостатки PHP FastCGI и mod_php…

Привет, Вы узнаете про php fastcgi, Разберем основные ее виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое php fastcgi, mod_php, php как модуль apache, cgi-программы , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

Общая схема взаимодействия посетителя с динамическим веб-сайтом

Основные различия между сборками.

Безопасность:

  • mod_php :
    в .htaccess будут работать директивы php_value, разрешены (точнее необходимы) права 777 (что крайне небезопасно), папки и файлы создаются не от имени пользователя, а от имени apache (в этом заключается один из недостатков: удалить такие файлы и папки без помощи администраторов Вы просто не сможете). При таком варианте будет работать 95% wap скриптов без предварительной настройки.
  • PHP FastCGI:
    в .htaccess запрещены директивы php_value (появится ошибка 500), права 777 недопустимы (вопреки заблуждениям, стоит отметить, что для записи в папку более чем достаточно прав 755, а файлам 644, или в крайнем случае, 666), файлы и папки, а также исполнение скриптов происходит от имени пользователя. При данной сборке бесплатные скрипты без предварительной настройки работать откажутся (появится ошибка 500).

Быстродействие:

  • mod_php:
    запускается веб-сервером при каждом новом запросе. На запуск приложения уходит иногда значительная часть времени, зачастую запуск занимает больше времени, чем выполняемая им далее полезная работа. Также можно отметить, что ошибки в скриптах могут привести к неработоспособности всего web-сервера.
  • PHP FastCGI:
    может быть реализовано в виде демона, т. е. оно само может являться сервером. FastCGI-приложение запущено всегда, поэтому время на запуск не тратится, ему достаточно только выполнять полезную работу. Ошибки в скриптах не приводят к неработаспособности всего сервера.

Важно заметить, что при 300-500 соединений ощутимой разницы для нагрузки на сервер не будет, будь то fcgi или mod_php. Но при значении 1000 соединений значительно будет преобладать FastCGI.

Подведем результаты сравнения php FastCGI и php модуль Apache (mod_php), выделив из всего выше сказанного достоинства и недостатки:

Вариант 1 PHP, как модуль Apache

В данном случае для работы PHP используется модуль веб-сервера apache mod_php.

Достоинства

  • Самая высокая скорость работы скриптов, по сравнению с другими методами (на больших количествах запросов).
  • Простота работы, сервер сам обрабатывает скрипты.
  • Общий конфигурационный файл для всех скриптов (php.ini).
  • Возможность задания переменных конфигурации PHP в конфигурационном файле web-сервера или средствами файла . htaccess

Недостатки

  • Все скрипты запускаются с правами с которым работает web-сервер, тем самым если есть необходимость записи в какую либо директорию – права доступа необходимо дать на нее всем, т.е . Об этом говорит сайт https://intellect.icu . низкая безопасность.
  • В случае запуска сторонних приложений скриптами (например, почтовая рассылка), нет возможности идентифицировать пользователя, который запустил процесс.
  • Излишняя нагрузка на web-сервер. Apache, занятый обработкой скриптов, может медленно отдавать другие статические данные.
  • Ошибки в скриптах могут привести к неработоспособности всего web-сервера.

Рисунок ниже схематично демонстрирует модульную архитектуру сервера Apache.

Модульная архитектура сервера Apache

PHP, как модуль сервера Apache, следовательно, в данном случае PHP и Apache можно рассматривать как единое целое, грубо говоря, одно многофункциональное приложение, так как PHP будет как бы встроен в архитектуру Apache, каждый модуль Apache при выполнении своих функций создает поток, а PHP будет лишь одни из потоков сервера Apache.

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

Особенность установки Apache + PHP на Windows заключается в модуле MPM, который появился тогда, когда была разработана версия Apache для операционных систем семейства Windows. Этот модуль реализует мультипроцессорные модели и управляет взаимодействием ядра сервера с операционной системой и другими модулями. Модуль MPM имеет две модели: Worker и Prefork. Первая модель thread safe, вторая модель non-threaded, а как вы помните мы скачивали PHP версии Thread Safe.

Модули Apache mod_cgi / mod_cgid отвечают за обработку сценариев CGI. для рабочего и многопоточного MPM использует модуль cgi daemon «mod_cgid».

phpinfo() при таком режиме работы выдаст эту информацию

Вариант 2 PHP, как FastCGI

При этом используется модуль Apache mod_fastcgi, скрипты передаются его средствами на вход интерпретатора PHP.

Достоинства

  • Все скрипты выполняются с правами пользователя – владельца www-домена.
  • Возможность индивидуальной настройки PHP для каждого пользователя.
  • Меньший расход оперативной памяти по сравнению с модулем apache.
  • Ошибки в скриптах не приводят к падению веб-сервера в отличие от режима php как модуль apache .
  • За счет кэширования некоторых промежуточных данных скрипт не интерпретируется каждый раз при выполнении и достигается более высокая скорость по сравнению с PHP как CGI.

Недостатки

  • Лишний процесс пользователя (php-cgi) находится в памяти после первого обращения к процессу.

Таким образом, использование FastCGI является более безопасным, как с точки зрения прав доступа, так и с точки зрения наличия ошибок в работе посторонних скриптов, и более экономичным и быстрым способом работы PHP-скриптов. mod_php, в свою очередь, имеет некоторое увеличение быстродействия при большой (в тысячи соединений) нагрузке на сайт.

phpinfo() выдаст эту информацию

Что такое FastCGI

В отличие от CGI, FastCGI использует постоянно запущенные процессы для обработки множества запросов.

cgi-программы взаимодействуют с сервером через STDIN и STDOUT запущенного процесса.

FastCGI-процессы используют для связи с сервером Unix Domain Sockets или TCP/IP . Это дает следующее преимущество над обычными CGI-программами: FastCGI-программы могут быть запущены не только на этом же сервере, но и где угодно в сети. Также возможна обработка запросов несколькими FastCGI-процессами, работающими параллельно. Можно использовать несколько FastCGI-серверов, распределяя нагрузку между ними с помощью nginx или lighttpd.

После установления соединения FastCGI-процесса с web-сервером, между ними начинается обмен данными с использованием простого протокола, решающего две задачи: организация двунаправленного обмена в рамках одного соединения (для эмуляции STDIN, STDOUT, STDERR) и организация нескольких независимых FastCGI-сессий в рамках одного соединения.

Все передаваемые данные оборачиваются в FastCGI-записи — единицу данных протокола. FastCGI-записи служат для организации двунаправленного обмена и мультиплексирования нескольких сессий в рамках одного соединения.

FastCGI-запись состоит из заголовка фиксированной длины, следующего за ним содержимого и выравнивающих данных переменной длины. Каждая запись содержит 7 элементов.

К сожалению, в одной статье не просто дать все знания про php fastcgi. Но я — старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое php fastcgi, mod_php, php как модуль apache, cgi-программы и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

php — Что такое mod_php?

Спросил

Изменено 1 год, 4 месяца назад

Просмотрено 143k раз

113

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

Просматривая учебник по Zend, я наткнулся на следующее утверждение:

Обратите внимание, что настройки php_flag в .htaccess работают, только если вы используете mod_php.

Кто-нибудь может объяснить, что это значит?

  • php
  • apache

mod_php означает PHP, как модуль Apache .

По сути, при загрузке mod_php в качестве модуля Apache он позволяет Apache интерпретировать файлы PHP (которые интерпретируются mod_php ) .


РЕДАКТИРОВАТЬ: Существует (как минимум) два способа запуска PHP при работе с Apache:

  • Использование CGI : процесс PHP запускается Apache, и именно этот процесс PHP интерпретирует код PHP, а не сам Apache
  • Использование PHP в качестве модуля Apache (называется mod_php ) : тогда интерпретатор PHP как бы «встраивается» в процесс Apache: внешний процесс PHP отсутствует, что означает, что Apache и PHP могут взаимодействовать лучше.


И повторное редактирование, после комментария : использование CGI или mod_php на ваше усмотрение : это вопрос конфигурации вашего веб-сервера.

Чтобы узнать, какой способ в настоящее время используется на вашем сервере, вы можете проверить вывод phpinfo() : должно быть что-то, указывающее, работает ли PHP через mod_php (или mod_php5 ) или через CGI .

Вы также можете взглянуть на функцию php_sapi_name() : она возвращает тип интерфейса между веб-сервером и PHP 9.0043 .


Если вы проверяете файлы конфигурации вашего Apache, при использовании mod_php должна быть строка LoadModule , выглядящая следующим образом:

 LoadModule php5_module modules/libphp5.so
 

(Имя файла справа может быть другим — например, в Windows это должно быть .dll )

7

Этот ответ взят с TuxRadar:

При запуске PHP через веб-сервер есть два различных варианта: запуск с использованием PHP CGI SAPI или запуск в качестве модуля для веб-сервера. У каждого есть свои преимущества, но в целом модуль предпочтительнее.

Запуск PHP как CGI означает, что вы в основном сообщаете своему веб-серверу расположение исполняемого файла PHP, и сервер запускает этот исполняемый файл, передавая ему вызванный вами сценарий каждый раз, когда вы посещаете страницу. Это означает, что каждый раз, когда вы загружаете страницу, PHP должен прочитать php.ini и установить его настройки, он должен загрузить все свои расширения, а затем он должен начать работу по разбору скрипта — много повторяющейся работы.

Когда вы запускаете PHP как модуль, PHP буквально находится внутри вашего веб-сервера — он запускается только один раз, загружает свои настройки и расширения только один раз, а также может хранить информацию между сеансами. Например, ускорители PHP полагаются на то, что PHP может сохранять кэшированные данные между запросами, что невозможно при использовании версии CGI.

Очевидным преимуществом использования PHP в качестве модуля является скорость — вы увидите значительный прирост скорости, если перейдете от CGI к модулю. Многие люди, особенно пользователи Windows, не осознают этого и продолжают использовать php.exe CGI SAPI, что очень обидно — модуль обычно в три-пять раз быстрее.

Тем не менее, у версии CGI есть одно ключевое преимущество: PHP считывает свои настройки каждый раз, когда вы загружаете страницу. Когда PHP работает как модуль, любые изменения, которые вы делаете в файле php.ini, не вступят в силу, пока вы не перезапустите свой веб-сервер, что делает версию CGI предпочтительнее, если вы тестируете множество новых настроек и хотите видеть мгновенные ответы.

1

На вашем сервере должны быть установлены модули php, чтобы он мог анализировать php-код.

Если вы используете Ubuntu, вы можете легко сделать это с помощью

 sudo apt-get install apache2
sudo apt-get установить php5
sudo apt-get установить libapache2-mod-php5
sudo /etc/init.d/apache2 перезапустить
 

В противном случае вы можете скомпилировать apache с php: http://dan.drydog.com/apache2php.html

Указание ОС вашего сервера поможет другим ответить более конкретно.

Просто добавим к этим ответам, что mod_php — это самый старый и самый медленный метод, доступный на HTTPD-сервере для использования PHP. Не рекомендуется, если вы не используете старые версии Apache HTTPD и PHP. Предпочтительными методами являются PHP-FPM и proxy_cgi.

Это означает, что PHP должен быть установлен как модуль в Apache, а не запускаться как CGI-скрипт.

mod_php — интерпретатор PHP.

Из документации один важный нюанс mod_php:

«mod_php не является потокобезопасным и заставляет вас придерживаться prefork mpm (многопроцессный, без потоков), что является самой медленной из возможных конфигураций»

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

mod rewrite — Как включить mod_rewrite для Apache 2.

2

Задавать вопрос

Спросил

Изменено 2 года, 4 месяца назад

Просмотрено 1,5 м раз

532

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

У меня новая установка Apache 2.2 на машину с Vista, все работает нормально, кроме перезаписи модов.

Я раскомментировал

 LoadModule rewrite_module modules/mod_rewrite.s
 

, но ни одно из моих правил перезаписи не работает, даже простые, такие как

 RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
 

Все правила, которые я использую, работают на моем хостинге, поэтому они должны быть в порядке, поэтому мой вопрос: есть ли какие-либо скрытые вещи в конфигурации apache, которые могут блокировать перезапись модов?

  • апач
  • мод-переписать

6

Чтобы использовать mod_rewrite , вы можете ввести в терминал следующую команду:

 sudo a2enmod rewrite
 

Перезапустите apache2 после перезапуска

 sudo /etc/init. d/apache2
 

или

 перезапуск службы sudo apache2
 

или в соответствии с новым унифицированным способом управления системой

 sudo systemctl перезапустить apache2
 

Затем, если хотите, можете использовать следующие .htaccess файл.

 
    RewriteEngine включен
    Переписать Базу /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    Правило перезаписи. /index.php [Л]

 

Приведенный выше файл .htaccess (если он помещен в ваш DocumentRoot ) будет перенаправлять весь трафик в файл index.php в DocumentRoot , если этот файл не существует.

Итак, допустим, у вас есть следующая структура каталогов, а httpdocs — это DocumentRoot

 httpdocs/
    .htaccess
    index.php
    картинки/
        привет.png
    js/
        jquery.js
    css/
        стиль.css
включает/
    приложение/
        app. php
 

Любой файл, существующий в httpdocs, будет передан запрашивающей стороне с использованием показанного выше .htaccess , однако все остальное будет перенаправлено на httpdocs/index.php . Файлы вашего приложения в include/app будут недоступны.

13

Для моей ситуации у меня было

 RewriteEngine On
 

в моем .htaccess вместе с модулем грузился и он не работал.

Решение моей проблемы состояло в том, чтобы отредактировать мою запись vhost, чтобы включить

 AllowOverride all
 

в разделе соответствующего сайта.

7

Попробуйте установить: AllowOverride All .


Второй наиболее распространенной проблемой является отсутствие перезаписи модов: a2enmod перепишите и перезапустите apache.

3

Если ничего из вышеперечисленного не работает, попробуйте отредактировать /etc/apache2/sites-enabled/000-default

почти вверху вы найдете

 <Каталог /var/www/>
    Опционы Индексы FollowSymLinks MultiViews
    Аллововеррайд
    Порядок разрешить, запретить
    разрешить от всех

 

Измените AllowOverride None на AllowOverride All

это сработало для меня

4

В новой версии Apache произошли некоторые изменения. Если у вас версия Apache 2.4, вам нужно перейти по адресу /etc/apache2/. Там будет файл с именем apache2.conf . Вы должны отредактировать это (у вас должны быть права root). Измените текст каталога следующим образом:

 
    Индексы опционов FollowSymLinks
    Разрешить переопределить все
    Требовать все предоставленные

 

Теперь перезапустите апач.

 служба apache2 перезагрузить
 

Надеюсь, сработает.

3

В Ubuntu:

Выполнить:

 a2enmod переписать
 

, а затем:

 перезапуск службы apache2
 

mod_rewrite теперь будет включен!

Есть много способов решить эту проблему, если вы знаете причину проблемы.

Проблема 1

Во-первых, это может быть проблема с тем, что на вашем апаче не установлен или не включен модуль mod_rewrite.c.

По этой причине вам нужно включить его следующим образом:

  1. Откройте консоль и введите в нее следующее:

    sudo a2enmod переписать

  2. Перезапустите сервер Apache.

    перезапуск службы apache2

Проблема 2

  1. Вы также можете, в дополнение к вышесказанному, если это не сработает, изменить правило переопределения из файла конфигурации apache (либо apache2.conf, http.conf, либо 000- файл по умолчанию).

  2. Найдите «Каталог /var/www/»

  3. Изменить «Ничего не отменить» на «Переопределить все»

Проблема 3

Если вы получаете сообщение об ошибке, указывающее, что модуль перезаписи не найден, то, вероятно, ваш модуль userdir не включен. По этой причине вам необходимо включить его.

  1. Введите в консоль:

    sudo a2enmod userdir

  2. Затем попробуйте включить модуль перезаписи, если он еще не включен (как упоминалось выше).

Чтобы узнать больше об этом, вы можете посетить этот сайт: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions. html

2

Откройте терминал и введите a2enmod rewrite , это активирует модуль mod_rewrite для Apache.

Затем перейдите к /etc/apache2/sites-available и отредактируйте файл по умолчанию. (Для этого у вас должны быть права на запись для этого файла и папки, доступной для сайтов.)

Замените ниже существующие строки с 4 по 14

 DocumentRoot /var/www
<Каталог />
Параметры
Разрешить переопределить все

<Каталог /var/www/>
Опционы Индексы FollowSymLinks MultiViews
Разрешить переопределить все
Порядок разрешить, запретить
разрешить от всех

 

Теперь перезапустите apache с помощью /etc/init.d/apache2 restart или service apache2 restart

Еще раз пройдите тест чистого URL, и на этот раз он будет пройден.

0

Только что заметил, что вы сказали mod_rewrite. s вместо mod_rewrite.so — надеюсь, это опечатка в вашем вопросе, а не в файле httpd.conf! 🙂

Я больше привык использовать Apache в Linux, но мне пришлось сделать это на днях.

Прежде всего, загляните в каталог установки Apache. (Я предполагаю, что вы установили его в «C:\Program Files» здесь)

Загляните в папку: «C:\Program Files\Apache Software Foundation\Apache2.2\modules» и убедитесь, что там файл с именем mod_rewrite.so там. (Так и должно быть, это предусмотрено как часть установки по умолчанию.

Затем откройте «C:\Program Files\Apache Software Foundation\Apache2.2\conf» и откройте httpd.conf. Убедитесь, что строка:

 #LoadModule rewrite_module modules/mod_rewrite.so
 

раскомментирован:

 LoadModule rewrite_module modules/mod_rewrite.so
 

Кроме того, если вы хотите включить RewriteEngine по умолчанию, вы можете добавить что-то вроде

 
    RewriteEngine включен

 

в конец файла httpd. conf.

Если нет, убедитесь, что вы указали

 RewriteEngine On
 

где-то в вашем файле .htaccess.

1

Я только что сделал это

 sudo a2enmod переписать
 

, тогда вам необходимо перезапустить службу apache, выполнив команду

 sudo service apache2 restart
 

Используйте команду ниже

 sudo a2enmod переписать
 

И перезапустите apache с помощью приведенной ниже команды

 sudo service apache2 restart
 

Старый поток, просто хочу добавить, что не устанавливайте AllowOverride для всех, вместо этого используйте определенный мод, который вы хотите использовать,

 AllowOverride mod_rewrite mod_mime
 

Эта строка должна быть раскомментирована

 LoadModule rewrite_module modules/mod_rewrite.so
 

Ссылки

  • http://www.eschrade.com/page/why-you-should-not-use-htaccess-allowoverride-all-in-production/
  • https://httpd. apache.org/docs/2.4/misc/security_tips.html
  • https://httpd.apache.org/docs/2.4/rewrite/avoid.html

Очевидно, что это можно сделать несколькими способами, но я бы предложил использовать более стандартный:

 ErrorDocument 404 /index.php?page=404
 

Что у меня сработало (в ubuntu):

 sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
 

Также, как уже упоминалось, убедитесь, что AllowOverride all установлен в соответствующем разделе /etc/apache2/sites-available/default

В первый раз, когда я боролся с правилами mod_rewrite, игнорирующими мой трафик, я узнал ( разочарование), что я поместил их не в ту , что означало, что мой трафик будет игнорировать все из них, независимо от того, насколько хорошо они написаны. Убедитесь, что это не происходит с вами:

# Измените расположение журнала в соответствии с вашей системой. Журнал перезаписи /var/log/apache-rw.log RewriteLogLevel 2

Эти параметры будут активированы, если вы выполните плавный перезапуск Apache, поэтому вы можете перезапустить их и внимательно следить за поведением mod_rewrite. Как только ваша проблема будет устранена, снова уменьшите уровень RewriteLogLevel и отпразднуйте.

На 100% своего опыта я обнаружил, что RewriteLog помог мне обнаружить проблему с моими правилами перезаписи. Я не могу рекомендовать это достаточно. Удачи вам в устранении неполадок!

Также эта закладка — ваш лучший друг: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

Ubuntu – Результаты поиска пакетов — libapache2-mod-php

Ubuntu – Результаты поиска пакетов — libapache2-mod-php

» Убунту » Пакеты » Результаты поиска пакетов

Поиск в определенном наборе: [бионический] [бионические обновления] [бионические бэкпорты] [фокусный] [фокусные обновления] [фокусные-бэкпорты] [озорной] [ошибочные обновления] [озорные-бэкпорты] [варенье] [джамми-обновления] [джемми-бэкпорты] [кинетический]

Ограничить поиск определенной архитектурой: [i386] [амд64] [мощный компьютер] [рука64] [армхф] [ppc64el] [s390x]

Вы искали пакеты, имена которых содержат libapache2-mod-php во всех комплектах, всех разделах и всех архитектурах. Найдено 5 подходящих пакетов.

Точные совпадения

Пакет libapache2-mod-php

  • bionic (18.04LTS) (php): серверный язык сценариев со встроенным HTML (модуль Apache 2) (по умолчанию)
    1:7.2+60ubuntu1: все
    также предоставлено: libapache2-mod-php7.2
  • бионических обновлений: Виртуальный пакет
    предоставлено: libapache2-mod-php7.2
  • фокусных (20.04LTS) (php): серверный язык сценариев со встроенным HTML (модуль Apache 2) (по умолчанию)
    2:7.4+75: все
    также предоставлено: libapache2-mod-php7.4
  • фокальные обновления: Виртуальный пакет
    предоставлено: libapache2-mod-php7.4
  • озорной (21.10) (php): серверный язык сценариев со встроенным HTML (модуль Apache 2) (по умолчанию)
    2:8.0+82~0сборка 1: все
    также предоставлено: libapache2-mod-php8. 0
  • озорных обновления: Виртуальный пакет
    предоставлено: libapache2-mod-php8.0
  • варенье (22.04LTS) (php): серверный язык сценариев со встроенным HTML (модуль Apache 2) (по умолчанию)
    2:8.1+92ubuntu1: все
    также предоставлено: libapache2-mod-php8.1
  • jammy-обновления: Виртуальный пакет
    предоставлено: libapache2-mod-php8.1
  • кинетический (php): серверный язык сценариев со встроенным HTML (модуль Apache 2) (по умолчанию)
    2:8.1+92ubuntu1: все
    также предоставлено: libapache2-mod-php8.1

Другие обращения

Пакет libapache2-mod-php7.2

  • bionic (18.04LTS) (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    7.2.24-0ubuntu0.18.04.13 [ безопасность ]: amd64 i386
    7. 2.3-1ubuntu1 [ порта ]: arm64 armhf ppc64el s390x
  • бионических обновления (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    7.2.24-0ubuntu0.18.04.13: amd64 arm64 armhf i386 ppc64el s390x

Пакет libapache2-mod-php7.4

  • фокусный (20.04LTS) (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    7.4.3-4ubuntu2.12 [ безопасность ]: amd64 i386
    7.4.3-4ubuntu1 [ порта ]: arm64 armhf ppc64el s390x
  • основных обновления (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    7.4.3-4ubuntu2.13: amd64 arm64 armhf i386 ppc64el s390x
  • варенье (22.04LTS) (httpd): Переходный пакет [ юниверс ]
    8. 1.2-1ubuntu2.2 [ безопасность ]: amd64 i386
    8.1.2-1ubuntu2 [ порта ]: arm64 armhf ppc64el s390x
  • jammy-updates (httpd): Переходный пакет [ юниверс ]
    8.1.2-1ubuntu2.5: amd64 arm64 armhf i386 ppc64el s390x
  • кинетический (httpd): Переходный пакет [ юниверс ]
    8.1.7-1ubuntu3: amd64 arm64 armhf i386 ppc64el s390x

Пакет libapache2-mod-php8.0

  • озорной (21.10) (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    8.0.8-1ubuntu0.4 [ безопасность ]: amd64 i386
    8.0.8-1build1 [ порта ]: arm64 armhf ppc64el s390x
  • озорных обновления (httpd): серверный язык сценариев со встроенным HTML (модуль Apache 2)
    8. 0.8-1ubuntu0.4: amd64 arm64 armhf i386 ppc64el s390x
  • варенье (22.04LTS) (httpd): Переходный пакет [ вселенная ]
    8.1.2-1ubuntu2.2 [ безопасность ]: amd64 i386
    8.1.2-1ubuntu2 [ порта ]: arm64 armhf ppc64el s390x
  • jammy-updates (httpd): Переходный пакет [ юниверс ]
    8.1.2-1ubuntu2.5: amd64 arm64 armhf i386 ppc64el s390x
  • кинетический (httpd): Переходный пакет [ юниверс ]
    8.1.7-1ubuntu3: amd64 arm64 armhf i386 ppc64el s390x

Пакет libapache2-mod-php8.1

  • jammy (22.04LTS) (httpd): на стороне сервера, встроенный в HTML язык сценариев (модуль Apache 2) [ юниверс ]
    8.