Apache Kniffe

Installiert man Apache via Xampp und will ihn dann im Control Panel starten, kommt es oft zu Problemen mit belegten Ports. Die Ursachen waren bisher:

  • Skype (muss beendet werden)
  • VM Ware – Ein Service von VMWare der im Hintergrund läuft belegt einen wichtigen Port (einfach den Service beenden, oder via msconfig den service aus dem autostart kicken)

Wenn die DocumentRoot geändert wird, muss sicher gestellt werden dass apache das Recht hat in das Verzeichnis zu schauen (v.a. wenn es auf einer anderen Partition liegt)

In der httpd-xampp.conf einfach hinzufügen:

# MKEutel – set directory permission for apache
<Directory „D:/Work/Haupt/NextOrder/Projekt_01/Dev“>
Require all granted

# Any other directory-specific stuff
</Directory>

Virtual Hosts bieten die Möglichkeit auf einer IP (z.Bsp. 127.0.0.1) verschiedene Hosts anzusprechen. Das ist nützlich wenn man mehrere Entwicklungsprojekte parallel bearbeitet. Zuerst müssen die Hostnamen in der Windows hosts-Datei unter system32/drivers/etc/hosts eingetragen werden. Jeder zeigt auf den localhost mit 127.0.0.1. Beispiel:

# localhost name resolution is handled within DNS itself.
127.0.0.1       localhost
#    ::1             localhost

127.0.0.1        versus.dev
127.0.0.1        local.dev

Dann müssen die virtual hosts versus.dev und local.dev in der apache config datei httpd-vhosts.conf eingetragen werden. Zunächst wird in dieser Datei die Zeile NameVirtualHost *:80 auskommentiert. Jetzt sind namensbasierte virtual hosts am port 80 möglich. Dann macht es Sinn einen default host einzutragen wenn die angefragte URL auf keinen name eines anderen virtual host passt:

## first host is the default xampp host
<VirtualHost *:80>
ServerName localhost
DocumentRoot „C:/xampp/htdocs“
<Directory „C:/xampp/htdocs“>
Require all granted
</Directory>
</VirtualHost>

Außerdem werden die weiteren virtual hosts eingetragen:

<VirtualHost *:80>
ServerName versus.dev
ServerAlias www.versus.dev
DocumentRoot „C:/xampp/htdocs/intranet“
<Directory „C:/xampp/htdocs/intranet/php“>
DirectoryIndex index.php
##Options Indexes FollowSymLinks MultiViews
##AllowOverride All
##Order allow,deny
##allow from all
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName local.dev
DocumentRoot „W:/Work/Aktuell/Versus-Marketing/Projekte/Projekt1/Dev“
<Directory „W:/Work/Aktuell/Versus-Marketing/Projekte/Projekt1/Dev“>
DirectoryIndex index.html
Require all granted
</Directory>
</VirtualHost>

Das Directory-Tag bietet die Möglichkeit eine bestimmte Datei suchen und ausführen zu lassen wenn das gegebene Verzeichnis angefragt wurde. Require all granted ist hier essentiell, auch wenn das Directory-Tag nicht benötigt würde. Nur so bekommt der Server Zugriff auf das angegebene Verzeichnis.

Wichtig: Werden die Virtual Hosts nicht aufgelöst sobald die Internetverbindung fehlt, liegt es daran, dass der Virtual Host nicht in der windows hosts Datei eingetragen ist.

.htacess auf Virtual Host

Auf Windows kann man nicht direkt eine .htaccess Datei anlegen, da Windows einen Dateinamen fordert. Es funktioniert aber über einen Texteditor, in dem man einfach eine neue Datei anlegt und sie unter .htaccess abspeichert. WAMP liefert beispielsweise keine .htaccess per default mit aus, deswegen muss man selbst eine erstellen.

Die .htaccess liegt normalerweise in der Root des Servers. Bei WAMP ist es das Verzeichnis www im WAMP Ordner, das per default die Root für den localhost ist. Damit die .htaccess funktioniert muss man im Apache das Modul rewrite_module laden.

Arbeitet man mit Virtual Hosts kann man eine .htaccess Datei einfach in der Root des virtuellen Servers ablegen. Hier muss man aber zusätzlich in der Datei httpd-vhosts.conf den Eintrag AllowOverride All hinzufügen.

Port 80 Besetzt

Es kann vorkommen, dass der Port 80 auf einem System bereits genutzt wird z.Bsp. vom Microsoft-IIS /10.0. Dann sollte man Apache auf einen anderen Port einstellen. Man kann den Port 80 im WAMP Menu -> Apache direkt testen. In der httpd.conf im Apache sucht man dein Eintrag Listen 0.0.0.0:80 und ändert ihn auf Listen 0.0.0.0:8080 um beispielweise den Port 8080 zu nutzen.
Achtung: Der Port muss dann auch im VirtualHost eingestellt werden: <VirtualHost *:8080>.