Htaccess: Nachgestellten Schrägstrich von URL hinzufügen/entfernen

Lesezeit: 8 Minuten

Htaccess Nachgestellten Schragstrich von URL hinzufugenentfernen
Lukas

Meine Website führt ein Skript mit dem Namen -> WSS-Wallpaper-Skript aus

Mein Problem -> Ich habe versucht, das Entfernen oder Hinzufügen eines nachgestellten Schrägstrichs am Ende meiner URL zu erzwingen, um doppelte Inhalte zu verhindern und meine URLs zu bereinigen.

Ich habe alle möglichen ausprobiert und alles versucht, was ich mir vorstellen konnte, und jede Menge aus den Interwebs, aber noch kein Glück! Es könnte eine schnelle Lösung sein, aber ich habe es so oft betrachtet, dass ich wahrscheinlich blind für etwas absolut Offensichtliches bin.

Also präsentiere ich Ihnen alle meine .htaccess Code:

DirectoryIndex index.php

RewriteEngine on
RewriteRule ^download/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4&download=1 [L]
RewriteRule ^file/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4 [L]
RewriteRule ^preview/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) wallpaper_preview.php?id=$1&width=$2&height=$3&name=$4 [L]
RewriteRule ^thumbnail/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/]+) image.php?wallpaper_id=$1&width=$2&height=$3&cropratio=$4&align=$5&valign=$6&file=$7 [L]
RewriteRule ^cat/([0-9]+)?/([^/\.]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&page=$3 [L]
RewriteRule ^cat/([0-9]+)?/([^/\.]+)/([0-9a-zA-Z?-]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&sortby=$3&page=$4 [L]
RewriteRule ^cat/([0-9]+)?/([^/\.]+)/([0-9a-zA-Z?-]+)-([0-9]+) index.php?task=category&id=$1&sortby=$3&page=$4 [L]
RewriteRule ^cat/([0-9]+)?/([^/\.]+) index.php?task=category&id=$1&name=$2 [L]
RewriteRule ^tag/([^/\.]+)/([0-9a-zA-Z?-]+)/([0-9]+) index.php?task=tag&t=$1&sortby=$2&page=$3 [L]
RewriteRule ^tag/([^/\.]+) index.php?task=tag&t=$1 [L]
RewriteRule ^profile/([0-9]+)?/([^/\.]+) index.php?task=profile&id=$1&name=$2 [L]
RewriteRule ^profile/comments/([0-9]+)?/([^/\.]+) index.php?task=users_comments&id=$1&name=$2 [L]
RewriteRule ^page/([0-9]+) index.php?task=view_page&id=$1 [L]  
RewriteRule ^register index.php?task=register [L] 
RewriteRule ^lost-password index.php?task=lost_pass [L] 
RewriteRule ^links index.php?task=links [L]
RewriteRule ^news/item/([0-9]+)/([^/\.]+) index.php?task=news&id=$1 [L]
RewriteRule ^news/page([0-9]+) index.php?task=news&page=$1 [L]
RewriteRule ^members/([^/\.]+)-([^/\.]+)/page([0-9]+)? index.php?task=member_list&sort=$1&order=$2&page=$3 [L]
RewriteRule ^members index.php?task=member_list [L]
RewriteRule ^messages index.php?task=messages [L]
RewriteRule ^submit index.php?task=submit [L]
RewriteRule ^search/([^/\.]+) index.php?task=search&q=$1 [L]
RewriteRule ^search index.php?task=search [L]
RewriteRule ^submit index.php?task=submit [L]
RewriteRule ^r-([0-9]+)?-([0-9]+)? go.php?id=$1&ref=$2 [L]
RewriteRule ^r-([0-9]+)? go.php?id=$1 [L]
RewriteRule ^([^/\.]+)/([0-9]+)/([^/\.]+) index.php?task=view&id=$2&name=$3 [L]
RewriteRule ^news/([^/\.]+) index.php?task=news&name=$1 [L]
RewriteRule ^profile/([^/\.]+) index.php?task=profile&name=$1 [L]
RewriteRule ^news index.php?task=news [L]
RewriteRule ^page/([^/\.]+) index.php?task=view_page&name=$1 [L]  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([0-9a-zA-Z'?-]+)/([0-9]+) index.php?task=category&name=$1&sortby=$2&page=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+) index.php?task=view&name=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+) index.php?task=category&name=$1 [L]


## www reslove ##
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
## www reslove ##

## index reslove ##
Options +FollowSymLinks
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ http://www.epicwallpaper.net/$1 [R=301,L]
## index reslove ##

  • Auch wenn jemand den bösen Jungen reparieren kann, könntest du hier eine Antwort posten. Danke

    – Lukas

    28. Januar 2014 um 21:29 Uhr

  • Bitte den Code hier posten.

    – Surreale Träume

    28. Januar 2014 um 21:30 Uhr

  • Bearbeiten Sie Ihren Beitrag, fügen Sie Ihren Code in Ihren Beitrag ein, markieren Sie ihn und drücken Sie „STRG+K“, um ihn als Code zu formatieren

    – Jon Lin

    28. Januar 2014 um 21:32 Uhr

  • Hast du wirklich oder ? erlaubt in Ihrer URI? Eine der RewriteRules (ganz unten) legt dies nahe. Ich mache mir Sorgen, dass sie den Server verwirren könnten, noch bevor .htaccess sie verarbeiten kann.

    – Phil Perry

    28. Januar 2014 um 22:22 Uhr

  • Um den Nachsatz von URLs zu entfernen, die nicht auf ein Verzeichnis verweisen , können Sie diese Lösung verwenden helponnet.com/2020/02/20/…

    – Amit Verma

    11. November 2021 um 17:53 Uhr


Htaccess Nachgestellten Schragstrich von URL hinzufugenentfernen
Jon Lin

Direkt unter der RewriteEngine On Linie, füge hinzu:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]

um eine Richtlinie ohne abschließenden Schrägstrich durchzusetzen.

So erzwingen Sie eine Richtlinie für nachgestellte Schrägstriche:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R] # <- for test, for prod use [L,R=301]

BEARBEITEN: kommentierte die R=301 Teile, weil, wie in einem Kommentar erklärt:

Seien Sie vorsichtig damit R=301! Habe es dabei bewirkt, dass viele Browser die .htaccess-Datei unbegrenzt zwischenspeichern: Es wird irgendwie irreversibel, wenn Sie den Browser-Cache nicht auf allen Computern löschen können, auf denen er geöffnet wurde. Gehen Sie beim Testen besser mit einfach R oder R=302

Nachdem Sie Ihre Tests abgeschlossen haben, können Sie verwenden R=301.

  • Gott, ich könnte dich küssen! Arbeitete mit Erzwingen eines No-Trailing-Slash, der andere gab mir 500 Serverfehler. Danke, Jon Lin!

    – Lukas

    28. Januar 2014 um 21:59 Uhr

  • Die No-Trailing-Slash-Regel funktioniert nicht, wenn sich die Website in einem Verzeichnis befindet (wie example.org/blog/)

    – Grasdoppelt

    3. Dezember 2014 um 2:59 Uhr

  • Seien Sie vorsichtig damit R=301! Wenn Sie es dort haben, speichern viele Browser die .htaccess-Datei auf unbestimmte Zeit: Es wird irgendwie irreversibel, wenn Sie den Browser-Cache nicht auf allen Computern löschen können, auf denen es geöffnet wurde. Gehen Sie beim Testen besser mit einfachem “R” oder “R=302”

    – Jonathan Weber

    22. September 2016 um 18:33 Uhr

  • Wenn VirtualDocumentRoot ausgeschaltet ist, entfernen Sie den Schrägstrich am Anfang, d. h.: $1 anstatt /$1 Und, @JonathanWeber, die .htaccess-Datei wird nicht bereitgestellt, aber der Expires-Header teilt den Browsern mit, wie lange eine Ressource zwischengespeichert werden soll.

    – zweimal jr

    22. Februar 2017 um 18:37 Uhr


  • @Nrc, weil es neben Dateien und Verzeichnissen noch andere Arten von Zuordnungen gibt und es auch möglich ist, dass eine Anfrage weder einer Datei noch einem Verzeichnis zugeordnet ist, sondern neu geschrieben werden muss. Das Negativ stellt sicher, dass etwas, das entweder neu geschrieben wurde oder bereits etwas im Dateisystem zugeordnet ist, übersprungen wird.

    – Jon Lin

    30. April 2017 um 0:00 Uhr

Htaccess Nachgestellten Schragstrich von URL hinzufugenentfernen
Gras doppelt

Um die Antwort von Jon Lin zu ergänzen, ist hier eine Technik ohne abschließenden Schrägstrich, die auch funktioniert, wenn sich die Website in einem Verzeichnis befindet (wie example.org/blog/):

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]

Der Vollständigkeit halber hier eine Alternative, die das betont REQUEST_URI beginnt mit einem Schrägstrich (zumindest in .htaccess Dateien):

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.*)/$
RewriteRule ^ /%1 [R=301,L] <-- added slash here too, don't forget it

Nur nicht verwenden %{REQUEST_URI} (.*)/$. Denn im Stammverzeichnis REQUEST_URI gleich /der führende Schrägstrich, und er würde als nachgestellter Schrägstrich fehlinterpretiert werden.

Wenn Sie an mehr Lektüre interessiert sind:

(Update: Diese Technik ist jetzt umgesetzt in Laravel 5.5)

  • Diese spezielle Variante ist sehr nützlich, insbesondere wenn moderne URL-Konventionen verwendet werden. Ich hoffe, Sie haben nichts dagegen, ich reiche es ein htaccess-Snippets-Repository.

    – alexw

    30. März 2015 um 4:54 Uhr

  • Dadurch wird das Problem beseitigt, wenn REQUEST_URI (Stamm) als nachgestellter Schrägstrich interpretiert wird, der ebenfalls eine Endlosschleife verursacht. Danke

    – Ruslan Abuzant

    28. Februar 2016 um 17:26 Uhr

  • Ja, akzeptierte Antwort reicht nicht, wenn Website in einem Verzeichnis liegt, aber diese Antwort mit RewriteCond %{REQUEST_URI} (.+)/$ entfernt nur einen letzten abschließenden Schrägstrich (z. B. mehrere Umleitungen von sth/// nach sth// nach sth/ nach sth erforderlich). Um alle abschließenden Schrägstriche in einer Umleitung zu entfernen, verwenden Sie eine bessere Lösung RewriteCond %{REQUEST_URI} (.+?)/+$

    – Mikep

    11. Mai 2017 um 18:01 Uhr

  • Darüber hatte ich auch schon nachgedacht. Das Ergebnis ist jedoch korrekt, und da es sich um einen Grenzfall handelt, bevorzuge ich die Einfachheit des Codes.

    – Grasdoppelt

    13. Mai 2017 um 16:22 Uhr


  • @GrasDouble, vielen Dank, dass Sie lange nach dieser Lösung gesucht haben. unzählige Methoden ausprobiert, aber Ihre funktionierte gut! ein großes Dankeschön.

    Benutzer2711639

    20. Juli 2017 um 19:38 Uhr

1646912648 503 Htaccess Nachgestellten Schragstrich von URL hinzufugenentfernen
Swetoslaw Marinow

Dies ist, was ich für meine neueste App verwendet habe.

# redirect the main page to landing
##RedirectMatch 302 ^/$ /landing

# remove php ext from url
# https://stackoverflow.com/questions/4026021/remove-php-extension-with-htaccess
RewriteEngine on 

# File exists but has a trailing slash
# https://stackoverflow.com/questions/21417263/htaccess-add-remove-trailing-slash-from-url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)/+$ /$1 [R=302,L,QSA]

# ok. It will still find the file but relative assets won't load
# e.g. page: /landing/  -> assets/js/main.js/main
# that's we have the rules above.
RewriteCond %{REQUEST_FILENAME} !\.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^/?(.*?)/?$ $1.php

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
## hide .html extension
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+).html
RewriteRule ^ %1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)/\s
RewriteRule ^ %1 [R=301,L]

## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^\.]+)$ $1.html [L]


<Files ~"^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

Dies entfernt HTML-Code oder PHP, wenn Sie es ergänzen. Ermöglicht das Hinzufügen eines nachgestellten Schrägstrichs, der sowie die URL ohne nachgestellten Schrägstrich angezeigt werden, wobei der 404-Code umgangen wird. Plus ein wenig mehr Sicherheit.

987780cookie-checkHtaccess: Nachgestellten Schrägstrich von URL hinzufügen/entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy