it-swarm.com.de

Wie implementiere ich das Umschreiben von URLs in meiner .htaccess-Datei?

Ich möchte eine URL umschreiben (Warum? Siehe diese Frage .), Damit Benutzer Adressen wie sehen

labouseur.com/course-compilers.html 

sie können stattdessen einfach sehen und verwenden

labouseur.com/course-compilers

(Noch besser, vielleicht sollte ich das umstrukturieren, damit es Kurse/Compiler sind.)

Ich verwende einen Linux-basierten Shared Hosting-Dienst für meine Website, daher habe ich keine administrative Kontrolle über den Server, aber ich habe Kontrolle über .htaccess. Die Referenzen, die ich online gelesen habe, schienen mir unklar zu sein, deshalb suche ich hier nach ein wenig Klarheit und Rat.

17
Alan

Sie könnten tatsächlich .html von den Dateien auf Ihrem Server entfernen und Einstellungen in htaccess vornehmen, damit sie als HTML-Dateien bereitgestellt werden, aber das ist wahrscheinlich nicht das, wonach Sie suchen.

Mach das :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html
13
Rizwan Kassim

Stellen Sie zunächst sicher, dass Apache über das Modul verfügt und es in .htacces-Dateien zulässig ist, und fügen Sie dann Folgendes hinzu:

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

Ihr Beispiel würde erfordern

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

Für eine einstufige Verzeichnisstruktur und

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

Für eine mehrstufige Struktur.

Aber sei vorsichtig

Wenn Sie die Struktur haben

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

Die Umschreiberegeln in den untergeordneten .htaccess -Dateien beziehen sich auf den übergeordneten Ordner, und Sie können in Situationen mit chaotisch Umschreibeschleifen geraten. Stellen Sie sicher, dass Sie RewriteCond verwenden, um sie zu stoppen, wenn Sie können!

3
Aiden Bell

Als Ergänzung zu obigen Antworten kann man verwenden

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) Ermöglicht Buchstaben und Ziffern mit einem Bindestrich (-).

(.*) schreibt jede Anfrage neu, unabhängig davon, welche anderen folgenden Regeln den internen Serverfehler beim Zugriff verursachen können.

2
Abhishek Gurjar

Sie müssen dazu keine .htaccess-Datei verwenden. Strukturieren Sie Ihre Dateien einfach in Verzeichnisse und benennen Sie statt "labouseur.com/course-compilers.html" die Datei index.html in einem Verzeichnis namens "course-compilers". Wenn Sie dann auf dieses Verzeichnis zeigen, wird der Index standardmäßig bereitgestellt, aber nicht in der URL angezeigt. Sie könnten also einfach Ihre Links als "labourseur.com/course-compilers" schreiben und alles wird gut.

Kein .htaccess erforderlich.

1
Joel Glovier