it-swarm.com.de

saubere URLs und Unterschiede in den Hosts

Ich entwickle eine relativ statische Website, auf der ich auf jede Seite zugreifen möchte, ohne am Ende .html (oder .htm oder .xhtml ...) einzugeben (/about nicht /about.html).

Ich entwickle mit dem Apache 2.2 Server (in OSX). Links wie die oben genannten funktionieren einwandfrei. Keine Affen mit mod_rewrite, sie funktionieren einfach.

Auf meinem eigentlichen Webhost ( fatcow.com ) funktioniert dies jedoch nicht (ein Link zu /about löst nur einen 404-Fehler aus). Ich habe sie angerufen und sie scheinen nicht zu wissen, was los ist ... oder sie denken besonders, dass es ihr Problem ist. Sie verwenden Apache 2.0.

Was ist hier los und wie kann man es am besten umgehen? Ich würde eine Lösung vorziehen, bei der nicht für jede meiner Seiten ein mod_rewrite -Eintrag hinzugefügt wird. Wie kann ich das tun, wenn dies erforderlich ist?

Wenn ich mich für eine mod_rewrite -Lösung entscheide, würde das so aussehen:

RewriteEngine On
RewriteBase /
RewriteRule ^about$ /about.html
#and so on, for each page
3
Adam Greenhall

Sie müssen die folgende Zeile in Ihre .htaccess -Datei (en) einfügen:

Options +MultiViews

Die Wirkung von MultiViews ist wie folgt: Wenn der Server eine Anforderung für /some/dir/foo empfängt, wenn /some/dir MultiViews aktiviert hat, und /some/dir/foo existiert nicht, dann liest der Server das Verzeichnis nach Dateien mit dem Namen foo.* und fälscht effektiv eine Typzuordnung, die alle diese Dateien benennt und ihnen die gleichen Medientypen und Inhaltscodierungen zuweist, die dies tun würde Habe wenn der Kunde nach einem von ihnen namentlich gefragt hätte. Es wählt dann die beste Anpassung an die Anforderungen des Kunden.

Siehe diese Links für Details:


UPDATE:

Wenn Sie mit mod_rewrite arbeiten müssen, verwenden Sie diese Regel - Es wird versucht, alle erweiterungslosen URLs auf dieselbe zu schreiben, jedoch mit .html. Es müssen nicht für jede einzelne Regeln angegeben werden solcher URLs:

RewriteEngine On
RewriteBase /

# add .html file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

P.S Möglicherweise müssen Sie vor / einen Lash $1 hinzufügen - dies hängt von Ihrer Apache-Konfiguration ab.

5
LazyOne