Zur Navigation

.htaccess: einen trailing slash anfügen

1 Petra

Hallo,

könnt ihr mir mal wieder helfen? :-)

Ich will einen trailing slash ans Ende der URL anhängen,
wenn keiner dran ist und
wenn es sich nicht um einen Bildpfad o.ä. handelt.

Umgekehrt funktioniert es:
#for old urls to get rid of two trailing slashes
RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]
-> zwei trailing slashes werden entfernt

Das habe ich aus dem Netz, funktioniert aber nicht:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]
-> außerdem will ich einer rule, die ohne Domainnamen auskommt, weil ich es für verschiedene Domains brauche.

Das sollte eigentlich auch funktionieren:
#for old urls
RewriteCond %{REQUEST_URI} index.php
RewriteRule ^(.*[^/])/$ /index.php?q=$1/ [L]
-> tut es aber doch nicht. Meine URLs, die den trailing slash brauchen lauten so:
http://www.domain.de/index.php/author/view/4/
deshalb hatte ich es mit der Condition index.php probiert.

Wäre schön, wenn ihr eine Lösung kennt.

Schöne Grüße
Petra

02.12.2008 15:08

2 Jörg

Hallo Petra,

-> außerdem will ich einer rule, die ohne Domainnamen auskommt, weil ich es für verschiedene Domains brauche.

Dafür kannst du "%{HTTP_HOST}" einsetzen

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

Ansonsten sollte diese Weiterleitung funktionieren. Hast du eine RewriteBase angegeben?

RewriteEngine on

RewriteBase /

Auch bei der zweiten Rule hilft vielleicht die Angabe der RewriteBase - wobei auf der rechten Seite dann aber der führende Slash entfernt werden muss

02.12.2008 15:55

3 Petra

Hallo Jörg,

es funktioniert leider nicht - kein trailing slash wird angefügt.

Zitat von Jörg
Ansonsten sollte diese Weiterleitung funktionieren. Hast du eine RewriteBase angegeben?

Bisher nicht - aber es ändert auch nichts. Außer wenn ich sie so

RewriteBase 

angebe, dann kann ich nicht mal die Seite aufrufen.

Die ganze .htaccess sieht so aus:

AddType application/x-httpd-php5 .php

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

#for old urls to get rid of two trailing slashes
RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]  

RewriteCond %{REQUEST_URI} index.php/(.*)$
RewriteRule index.php/(.*)$ /index.php?$1
RewriteCond %{REQUEST_URI} index_admin.php/(.*)$
RewriteRule index_admin.php/(.*)$ /index_admin.php?$1

Mir scheint, daß die Zeilen, die den trailing slash anfügen sollen, einfach ignoriert werden

02.12.2008 17:43

4 Jörg

Bei mir funktioniert diese Weiterleitung einwandfrei, auch mit dem sonstigen Inhalt deiner .htaccess.

Du kannst es ja mal ohne Begrenzungszeichen versuchen:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

Aber eigentlich sollten dies kein Problem bereiten, da die erste Weiterleitung ja auch funktioniert...

02.12.2008 18:29 | geändert: 02.12.2008 18:31

5 Petra

Dem war leider nicht so. Es lag an dieser Zeile

RewriteCond %{REQUEST_FILENAME} !-f

Die traf wohl einfach nicht zu und der Rest wurde nicht ausgeführt.
Und auch an der letzten, sie schnitt alles nach index.php/ ab.
So funktioniert es jetzt:

RewriteCond %{REQUEST_URI} index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^index.php/(.*)$ http://%{HTTP_HOST}/index.php/$1/ [L,R=301]

Ich danke Dir! :)

02.12.2008 20:30

... 9 Monate später ...

6 Adino (Gast)

Hallo,

ich setze Joomla 1.5.14 mit der originalen .htaccess ein. Es funktionieren alle Seiten, nur Untermenüs nicht. Beispiel:

domain.xy/test/startseite - ok
domain.xy/test/zweiteseite - ok
domain.sy/test/startseite/untermenue - kommt ein 404er Fehler

Nach stundenlangem lesen in den Foren und testen aller möglichen Anpassungen der htaccess bin ich auf folgendes draufgekommen:

domain.sy/test/startseite/untermenue - kommt ein 404er Fehler
domain.sy/test/startseite/untermenue/ - FUNKTIONIERT

Wenn ich manuell einen Slash hintenanhänge, ist der 404er Fehler weg. Wie kann ich der bestehenden htaccess beibringen, dass am Ende der URL immer ein Slash sein soll?

Wäre echt ein Hit, wenn du mir da einen Tipp hättest - Vielen Dank - Adino

Options +FollowSymLinks
RewriteEngine On

# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits

RewriteBase /test

########## Begin - Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section

06.09.2009 10:37

7 Jörg

domain.sy/test/startseite/untermenue - kommt ein 404er Fehler

Wird der Fehler vom Webserver ausgegeben oder von Joomla?

Zum Vergleich kannst du eine nicht vorhandene Seite mit der Endung .txt aufrufen, also z.B.domain.xy/test/gibts-nicht.txt - dabei sollte eine Fehlerseite des Webservers erscheinen.

06.09.2009 12:39

8 404-Fehler (Gast)

Hallo Jörg,

es ist eindeutig eine Joomla-Fehlermeldung. Sie lautet:

404 - Component not found
You may not be able to visit this page because of:

1.an out-of-date bookmark/favourite
2.a search engine that has an out-of-date listing for this site
3.a mistyped address
4.you have no access to this page
5.The requested resource was not found.
6.An error has occurred while processing your request.
Please try one of the following pages:


•Home Page

If difficulties persist, please contact the System Administrator of this site.

Component not found

06.09.2009 13:05

9 Jörg

Dann handelt es sich wohl um einen internen Fehler bzw. eine Fehlkonfiguration von Joomla.

Du kannst die betreffenden URLs per Modrewrite weiterleiten auf die ensprechende URL mit Trailing Slash - das würde ich allerdings nur als Notbehelf einbauen, bis der Fehler behoben ist, da durch die Weiterleitung der Traffic verdoppelt wird. So ungefähr könnte die Weiterleitung vielleicht funktionieren (ungetestet):

RewriteBase /test

RewriteRule ^(/[^/^\.]+/[^/^\.]+)$ http://domain.xy/test$1/ [L,301]

06.09.2009 13:34

10 Lösung (Gast)

Hallo Jörg,

mit deiner Zeile erhalte ich einen "Internal Server Error". Liegt aber sicher nur an einer Kleinigkeit.

Aber ich hab inzwischen auch eine Lösung gefunden:

VOR die Einträge von Joomla hab ich gesetzt:

# Add trainling Slash for 404 Bug in Joomla
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.xy/test/$1/ [L,R=301]

Und siehe da - funktioniert tadellos. Eigenartige Sache. Vielen Dank für deine rasche Reaktion und Hilfe. Wünsche dir einen schönen Sonntag.

Gruß Adino :-)

06.09.2009 13:46