
Zunächst einmal funktioniert mein Beispiel eines virtuellen Hosts ohne Einbettung <? php echo 'Hello World'; ?>
in index.html
.
Apache
befindet sich auf derselben Maschine, die ich verwende. PHP
ist auf dieser Maschine zweimal verfügbar.
$ which php
/usr/bin/php
$ which php7.0
/usr/bin/php7.0
Außerdem: libapache2-mod-php7.0
ist bereits installiert.
Was ich bisher gemacht habe:
$ sudo mkdir /var/www/www.virtualhost.com/
$ cd /var/www/www.virtualhost.com/
$ sudo cat > index.html
<html>
<body>
<h1>My virtualhost</h1>
PHP Test:<br>
<?php echo "PHP"; ?>
</body>
</html>
ctrl+d
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-availble/virtualhost.com.conf
Nach dem Bearbeiten meiner virtualhost.com.conf
Datei sieht sie so aus:
<VirtualHost *:80>
ServerName www.virtualhost.com
ServerAlias virtualhost.com
ServerAdmin [email protected]
DocumentRoot /var/www/www.virtualhost.com
DirectoryIndex index.html index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/www.virtualhost.com/>
Options +Indexes -FollowSymlinks
AllowOverride None
</Directory>
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Anschließend habe ich meine Site aktiviert, einen Eintrag in meiner /etc/hosts
Datei vorgenommen und apache2
mit folgenden Befehlen neu gestartet:
$ sudo a2ensite virtualhost.com.conf
$ sudo apache2ctl restart
Die neuen Einträge in meinem /etc/hosts
sind:
127.0.0.1 www.testhost.com
127.0.0.1 www.virtualhost.com
Folgende Module sind aktiviert:
$ a2query -m
authz_host (enabled by maintainer script)
proxy_fcgi (enabled by site administrator)
socache_shmcb (enabled by site administrator)
negotiation (enabled by maintainer script)
filter (enabled by maintainer script)
access_compat (enabled by maintainer script)
authz_core (enabled by maintainer script)
deflate (enabled by maintainer script)
authn_file (enabled by maintainer script)
php7.0 (enabled by maintainer script)
authz_user (enabled by maintainer script)
authnz_fcgi (enabled by site administrator)
mime (enabled by maintainer script)
proxy (enabled by site administrator)
mpm_prefork (enabled by site administrator)
dir (enabled by maintainer script)
alias (enabled by maintainer script)
auth_basic (enabled by maintainer script)
setenvif (enabled by maintainer script)
cgi (enabled by site administrator)
env (enabled by maintainer script)
autoindex (enabled by maintainer script)
authn_core (enabled by maintainer script)
status (enabled by maintainer script)
ssl (enabled by site administrator)
Ohne diese Zeile funktioniert die Site. Wenn ich diese Zeile jedoch einbette, wird das Echo von PHP nicht ausgegeben <?php echo "PHP"; ?>
.index.html
Brauche ich sowas wie
LoadModule php7_module modules/libphp7.so
in meinem /etc/apache2/apache2.conf
?
Jeder Hinweis zur Lösung dieses Problems ist willkommen.
Antwort1
Damit der eingebettete PHP-Code in einer Datei ausgeführt werden kann, muss die Datei tatsächlich durch den PHP-Interpreter laufen. Standardmäßig .php
werden nur Dateien mit der Endung (und einigen anderen Dateierweiterungen) durch den PHP-Interpreter gesendet, da das standardmäßige Senden aller Dateien durch den PHP-Interpreter die Leistung verringert und unter Umständen Sicherheits- oder Funktionsprobleme verursachen kann.
Um Ihrem Webserver mitzuteilen, dass alle Dateien mit der Endung .php .html
über den PHP-Interpreter gesendet werden sollen, sollten Sie Ihrer Vhost-Konfiguration die folgende Zeile hinzufügen:
AddHandler application/x-httpd-php70 .html