index.php не загружается по умолчанию


107

Я только что установил CentOS, Apache и PHP. Когда я захожу на свой сайт http://example.com/myapp/ , появляется надпись «Запрещено». По умолчанию он не загружает файл index.php.

Когда я захожу на http://example.com/myapp/index.php , он работает нормально.

Есть идеи, как исправить эту проблему?

Ответы:


153

Apache необходимо настроить для распознавания index.php как индексного файла.

Самый простой способ добиться этого ..

  1. Создайте файл .htaccess в корневом веб-каталоге.

  2. Добавьте строку ...

DirectoryIndex index.php

Вот ресурс по этому поводу ...
http://www.twsc.biz/twsc_hosting_htaccess.php

Изменить: я предполагаю, что apache настроен на разрешение файлов .htaccess. Если это не так, вам придется изменить настройку в файле конфигурации apache (httpd.conf)


4
Вероятно, он должен быть в файле php.conf, который загружает apache.
staticsan 05

Я думаю, вы имеете в виду php.ini. Тем не менее, его apache не распознает index.php как файл индекса каталога. Является ли его обработка файлов php другой проблемой конфигурации apache.
Джон Химмельман

1
не забудьте перезапустить apache !! как и я! : /
Навид Эйнакчи 02

102

Хотя добавление DirectoryIndex index.php в файл .htaccess может работать,

НОТА:

В общем, вы никогда не должны использовать файлы .htaccess.

Это цитируется из http://httpd.apache.org/docs/1.3/howto/htaccess.html.
Хотя это относится к более старой версии apache, я считаю, что этот принцип все еще применим.

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

<Directory /myapp>
DirectoryIndex index.php
</Directory>

4
Все в порядке, если у вас есть доступ к этому файлу
Хайден Тринг

1
+1 за это. Это предпочтительный метод, если у вас нет доступа к httpd.conf.
Мэтью Джонсон

Я считаю, что добавление этого в конфигурационный файл default-ssl тоже нормально, если вы используете HTTPS.
Alex W

44

Предположительно, я бы сказал, что индекс каталога установлен на index.html или какой-то другой вариант, попробуйте:

DirectoryIndex index.html index.php

Это по-прежнему будет давать приоритет index.html над index.php (удобно, если вам нужно создать страницу обслуживания)


Мой выглядит так, но, к сожалению, загружает index.php вместо его выполнения.
Webnet

@Webnet, тогда вам следует подумать об изменении Type и LoadModules на php, чтобы он читал php [ stackoverflow.com/questions/5121495/…
Мерей Нурлан

15

Это может быть кому-то полезно. вот фрагмент из httpd.conf (окна Apache версии 2.2)

# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html
    DirectoryIndex index.php
</IfModule>

теперь он будет искать файл index.html, если он не найден, он будет искать index.php.


3

Попробуйте создать файл .htaccess со следующим

DirectoryIndex index.php

Изменить: На самом деле, нет пакета php-apache или чего-то, что вы должны установить с ними обоими?


3

У меня была такая же проблема с сайтом на нашем сайте, размещенном прямым администратором. я добавил

DirectoryIndex index.php

в качестве настраиваемого расширения httd (которое добавляет код в httpdфайл сайта ), а затем сайт запускал index.phpпо умолчанию.


2

То же самое для меня. Мое решение заключалось в том, что mod_dir не был включен, а apache2 не выдавал ошибку при чтении директивы в моем файле VirtualHost:

DirectoryIndex index.html

Используя команды:

sudo a2enmod dir
sudo sudo service apache2 restart

Исправлена ​​проблема.


1
Я думаю ты имеешь в виду a2enmod?
TR_SLimey 06

1

Для информации: в некоторых конфигурациях Apache2 вы должны добавить команду DirectoryIndex в mods_enabled / dir.conf (она не находится в apache2.conf)


1

Прочитав все это и попытавшись исправить, я получил простое решение на форуме ubuntu ( https://help.ubuntu.com/community/ApacheMySQLPHP ). Проблема заключается в модуле libapache2-mod-php5. Вот почему браузер загружает файл index.php, а не отображает веб-страницу. Сделайте следующее. Если sudo a2enmod php5 возвращает модуль не существует, проблема связана с libapache2-mod-php5. Purge удалите модуль с помощью команды sudo apt-get --purge remove libapache2-mod-php5 Затем установите его снова sudo apt-get install libapache2-mod-php5


1

У меня был похожий симптом. Однако в моем случае мой идиотизм заключался в том, что в корневой папке Интернета был также пустой файл index.html. Apache обслуживал это, а не index.php, когда я явно не запрашивал index.php, поскольку он DirectoryIndexбыл настроен следующим образом в mods-available/dir.conf:

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

То есть index.html появляется перед index.php в списке приоритетов. Удаление файла index.html из корневого каталога, естественно, решило проблему. Ооо!


1

Пошаговая и полная инструкция для Ubuntu 16.04.4 LTS и Apache / 2.4.18

" sudo -s"

" cd /etc/apache2/mods-enabled"

" vi dir.conf" и переместите index.php сразу после DirectoryIndex, как показано ниже, и сохраните файл, затем перезапустите сервер apache.

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

" service apache2 restart"

Если вы не видите dir.conf, вам нужно будет загрузить его (как это сделать в Google)

Готово.


1

Этот пост может быть старым, но я просто отправляю его на случай, если он поможет кому-то другому, я бы не советовал создавать файл .htaccess в вашем корневом веб-каталоге и изменять индекс. Я чувствую, что лучше следовать инструкциям

  1. Перейдите в папку conf вашей папки apache, моя

    C:\Apache24\conf

  2. Откройте файл с именем

    httpd.conf

  3. Перейти в раздел

    <IfModule dir_module>
       DirectoryIndex index.html 
    
     </IfModule>
  4. Добавьте к нему index.php, как показано ниже

     <IfModule dir_module>
      DirectoryIndex index.html index.php
    
    </IfModule>

Таким образом, он по-прежнему выбирает index.html и index.php в качестве индекса по умолчанию, но отдает приоритет index.html, потому что index.html предшествует * index.php. Под этим я подразумеваю, что если у вас есть index.html и index.php в одном каталоге, index.html будет использоваться в качестве индекса по умолчанию, за исключением того, что вы пишете ** index.php * перед index.hml

Надеюсь, это кому-то поможет ... Счастливого кодирования


1

Этот работает как шарм!

Первый

<IfModule dir_module>
    DirectoryIndex index.html
     DirectoryIndex index.php
</IfModule>

затем после этого из

<Files ".ht*">
    Require all denied
</Files>

к

 <Files ".ht*">
    Require all granted
</Files>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.