index.php nie ładuje się domyślnie

Odpowiedzi:

153

Apache musi być skonfigurowany tak, aby rozpoznawał plik index.php jako plik indeksu.

Najprostszy sposób na osiągnięcie tego ..

  1. Utwórz plik .htaccess w swoim katalogu głównym.

  2. Dodaj linię ...

DirectoryIndex index.php

Oto zasób dotyczący tej sprawy ...
http://www.twsc.biz/twsc_hosting_htaccess.php

Edycja: Zakładam, że apache jest skonfigurowany tak, aby zezwalać na pliki .htaccess. Jeśli tak nie jest, musisz zmodyfikować ustawienie w pliku konfiguracyjnym Apache (httpd.conf)

John Himmelman
źródło
4
Powinien prawdopodobnie znajdować się w pliku php.conf ładowanym przez apache.
staticsan
Myślę, że masz na myśli php.ini. Niezależnie od tego jego apache nie rozpoznaje index.php jako pliku indeksu katalogów. Czy obsługa plików php jest kolejnym problemem z konfiguracją Apache.
John Himmelman,
1
nie zapomnij zrestartować Apache !! tak, jak ja zrobiłem! : /
Navid Einackchi
102

Chociaż dodanie „DirectoryIndex index.php” do pliku .htaccess może działać,

UWAGA:

Generalnie nigdy nie powinieneś używać plików .htaccess

Cytat z http://httpd.apache.org/docs/1.3/howto/htaccess.html.
Chociaż odnosi się to do starszej wersji Apache, uważam, że zasada nadal obowiązuje.

Dodanie następującego elementu do pliku httpd.conf (jeśli masz do niego dostęp) jest uważane za lepszą formę, powoduje mniejsze obciążenie serwera i ma dokładnie ten sam efekt:

<Directory /myapp>
DirectoryIndex index.php
</Directory>
M_M
źródło
4
to wszystko w porządku, jeśli masz dostęp do tego pliku
Hayden Thring
1
+1 za to. Jest to preferowana metoda, chyba że nie masz dostępu do httpd.conf.
Matthew Johnson,
Uważam, że dodanie tego do domyślnego pliku konfiguracyjnego ssl jest również w porządku, jeśli używasz protokołu HTTPS.
Alex W
44

Domyślam się, że indeks katalogu jest ustawiony na index.html lub inny wariant, spróbuj:

DirectoryIndex index.html index.php

Nadal będzie to nadawać index.html pierwszeństwo przed index.php (przydatne, jeśli chcesz wyrzucić stronę konserwacyjną)

Ben Rowe
źródło
Mój wygląda tak, ale niestety pobiera plik index.php zamiast go wykonywać.
Webnet
@Webnet więc powinieneś rozważyć zmianę Type and LoadModules na php, aby czytał php [ stackoverflow.com/questions/5121495/ ...
Merey Nurlan
15

To może być pomocne dla kogoś. tutaj jest fragment z httpd.conf (Apache w wersji 2.2 dla systemu Windows)

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

teraz będzie szukać pliku index.html, jeśli nie zostanie znaleziony, będzie szukać pliku index.php.

Maruf
źródło
3

Spróbuj utworzyć plik .htaccess w następujący sposób

DirectoryIndex index.php

Edycja: Właściwie, czy nie ma pakietu „php-apache” lub czegoś, co powinieneś zainstalować z obydwoma?

animuson
źródło
3

Miałem ten sam problem z witryną w naszej witrynie hostowanej bezpośrednio przez administratora. dodałem

DirectoryIndex index.php

jako niestandardowe rozszerzenie httd (które dodaje kod do httpdpliku witryn ), a następnie witryna uruchomiła index.phpdomyślnie.

Phil Errington
źródło
2

Dla mnie ten sam problem. Moim rozwiązaniem było to, że mod_dir nie był włączony, a apache2 nie wyświetlał błędu podczas odczytu dyrektywy w moim pliku VirtualHost:

DirectoryIndex index.html

Za pomocą poleceń:

sudo a2enmod dir
sudo sudo service apache2 restart

Naprawiono problem.

Martlark
źródło
1
Myślę, że masz na myśli a2enmod?
TR_SLimey,
1

Dla informacji: w niektórych konfiguracjach Apache2 musisz dodać polecenie DirectoryIndex w mods_enabled / dir.conf (nie znajduje się w apache2.conf)

Zitun
źródło
1

Po przeczytaniu tego wszystkiego i próbie naprawienia tego, dostałem proste rozwiązanie na forum ubuntu ( https://help.ubuntu.com/community/ApacheMySQLPHP ). Problem leży w module libapache2-mod-php5. Dlatego przeglądarka raczej pobiera plik index.php niż wyświetla stronę internetową. Wykonaj następujące czynności. Jeśli sudo a2enmod php5 zwraca moduł nie istnieje, to problem dotyczy libapache2-mod-php5. Wyczyść usuń moduł za pomocą polecenia sudo apt-get --purge usuń libapache2-mod-php5 Następnie zainstaluj go ponownie sudo apt-get install libapache2-mod-php5

Rupak Rokade
źródło
1

Miałem podobny objaw. Jednak w moim przypadku moje idiotyzm polegał na tym, że nieumyślnie miał również pusty plik index.html w folderze głównym sieci. Apache obsługiwał to, a nie index.php, gdy nie zażądałem wyraźnie index.php, ponieważ DirectoryIndexzostał skonfigurowany w następujący sposób w mods-available/dir.conf:

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

Oznacza to, że „index.html” pojawia się przed „index.php” na liście priorytetów. Usunięcie pliku index.html z katalogu głównego sieci w naturalny sposób rozwiązało problem. D'oh!

John Rix
źródło
1

Instrukcja krok po kroku i pełna instrukcja dla Ubuntu 16.04.4 LTS i Apache / 2.4.18

sudo -s

cd /etc/apache2/mods-enabled

" vi dir.conf" i przenieś index.php na prawo za DirectoryIndex, jak poniżej i zapisz plik, a następnie zrestartuj serwer Apache.

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

service apache2 restart

Jeśli nie widzisz dir.conf, musisz go załadować (google, aby dowiedzieć się, jak to zrobić)

Gotowe.

Łajno
źródło
1

Ten post może być stary, ale po prostu go publikuję, jeśli pomoże to innej osobie, nie radziłbym tworzyć pliku .htaccess w katalogu głównym sieci i zmieniać indeksu. Czuję, że lepiej postępować zgodnie z instrukcjami

  1. Przejdź do folderu conf w swoim folderze Apache

    C:\Apache24\conf

  2. Otwórz plik o nazwie

    httpd.conf

  3. Przejdź do sekcji

    <IfModule dir_module>
       DirectoryIndex index.html 
    
     </IfModule>
  4. Dodaj do niego index.php, jak pokazano poniżej

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

W ten sposób nadal wybiera index.html i index.php jako indeksy domyślne, ale daje pierwszeństwo index.html, ponieważ index.html występuje przed * index.php. Rozumiem przez to, że jeśli masz zarówno index.html, jak i index.php w tym samym katalogu, to index.html będzie używany jako domyślny indeks, chyba że napiszesz ** index.php * przed index.hml

Mam nadzieję, że to komuś pomoże ... Miłego kodowania

Znakomity Lawrence
źródło
1

Ten działa jak urok!

Pierwszy

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

potem po tym od

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

do

 <Files ".ht*">
    Require all granted
</Files>
MelPogz
źródło