2009-06-30 10 views
5

Ich möchte mit Seiten ohne Schrägstriche arbeiten. So, jetzt möchte ich meine URL mit einem nachgestellten Schrägstrich umleiten (mit. Htaccess) auf die gleiche URL ohne den Schrägstrich.Entfernen Sie Schrägstriche

bekam ich zwei .htaccess-Dateien:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteRule (.*) public/$1 
</IfModule> 

Und in meinem öffentlichen Ordner:

DirectoryIndex index.html index.php 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On   
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

ich die folgende Regel in die .htaccess-Datei in dem öffentlichen Ordner versucht fügte hinzu:

RewriteRule (.*)/$ $1 [R,L] 

Aber dann: example.com/public/page/view/2/

Leitet zu: example.com/**D:/webserver/**public/page/view/2

was offensichtlich nicht der Fall ist, was ich will ...

+0

Ich bin nicht sicher, wie Sie Ihr Problem beheben, aber ich bin mir nicht sicher, ob dies wirklich das ist, was Sie tun sollten. Von meinem Verständnis eine URL wie folgt anfordern: http://www.example.com/myDir leitet den Benutzer auf http://www.example.com/myDir/. Diese zusätzliche Umleitung konnte mit dem Schrägstrich vermieden werden. Dieser Schrägstrich identifiziert definitiv, dass "myDir" ein Verzeichnis anstelle einer Datei ist. – nikmd23

+0

Willst du damit sagen, dass der Schrägstrich Teil einer formalen/Standard-/Standardnotation ist? In diesem Fall habe ich eine ähnliche Frage. Wie kann ich umleiten, um den abschließenden Schrägstrich hinzuzufügen ;-) – Erik

+0

Da Sie nicht wirklich versuchen, in ein Verzeichnis umzuleiten, hilft Ihnen der abschließende Schrägstrich überhaupt nicht - tatsächlich tut es nichts, oder der andere. Sie sollten einfach mit allem, was Sie glücklich sind und konsequent in Ihrer Verwendung gehen – Fake51

Antwort

1

Warum y tun Sie haben mehrere .htaccess-Dateien? Wo wird die Umleitung auf public/$ 1 gespeichert? Es kann sein, dass Sie mit übersteuernden RewriteRule-Anweisungen konfrontiert werden, die die Dinge für Sie erschweren.

Ohne Ihr Setup zu kennen, ist es ziemlich schwer zu sagen, wie Sie die Umschreibungen verwenden sollten - können Sie angeben, wie die Dinge tatsächlich aussehen? Hier

+0

Ich habe alles auf eine .htaccess-Datei reduziert. Beim Debuggen wurde mir klar, dass einige Browser den nachgestellten Schrägstrich wegen der Historie der besuchten Seiten automatisch hinzugefügt haben. Löschen meiner Internet-Geschichte, Hinzufügen einer Rewritecond und rewriterule hat den Trick. – Erik

1

Haben Sie versucht, das Hinzufügen :

RewriteBase /public 

zur .htaccess in der öffentlichen Ordner-Datei zu erhalten:

<IfModule mod_rewrite.c> 
    RewriteEngine On    
    RewriteBase /public 

    RewriteRule (.*)/$ $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 
+0

Nur versucht, aber es wird nicht umleiten. – Erik

+0

Meinst du es leitet ohne diese Zeile um, aber leitet es nicht um? Außerdem ist nicht klar, wo Sie Ihre 'RewriteRule (. *)/$ $ 1 [R, L]' in die '.htaccess' Datei geschrieben haben. –

+0

Mit Ihrem Code erhalte ich folgende Ergebnisse: example.com/page/view/1 >> 404 error example.com/page/view/1/ >> Weiterleitung an example.com/public/page/ view/1 und dann zeigt eine 404-Nachricht – Erik

1

ist ein Beispiel aus der Apache-Dokumentation, die Sie verwenden können, um Ihr Problem zu lösen:

Nachgestellte Slash Problem

Beschreibung:

Jeder Webmaster ein Lied über das Problem singen kann der nachgestellte Schrägstrich bei URLs, die auf Verzeichnisse verweisen. Wenn sie fehlen, gibt der Server einen Fehler aus, denn wenn Sie/~ quux/foo anstelle von/~ quux/foo/sagen, sucht der Server nach einer Datei namens foo. Und weil diese Datei ein Verzeichnis ist, beschwert sie sich. Eigentlich versucht es in den meisten Fällen selbst zu beheben, aber manchmal muss dieser Mechanismus von Ihnen emuliert werden. Zum Beispiel, nachdem Sie haben eine Menge komplizierter URL Umschreibungen an CGI-Skripte getan usw.

Lösung:

Die Lösung für dieses subtile Problem ist automatisch der Server fügen Sie den Schrägstrich zu lassen. Um dies richtig zu machen, müssen wir eine externe Umleitung verwenden, damit der Browser nachfolgende Bilder korrekt anfordert. Wenn wir nur eine interne Umschreibung machen würden, würde dies nur für die Verzeichnisseite funktionieren, würde aber falsch gehen, wenn Bilder auf dieser Seite enthalten sind mit relativen URLs, weil der Browser ein Inline-Objekt anfordert. Zum Beispiel würde eine Anfrage für image.gif in /~quux/foo/index.html /~quux/image.gif ohne die externe Weiterleitung werden!

, also diesen Trick zu tun, schreiben wir:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

Die verrückt und faul in der Top-Level-Datei .htaccess ihre homedir folgend auch tun. Beachten Sie jedoch, dass dadurch Verarbeitungsaufwand entsteht.

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R] 

Source

2

Wordpress umleitet je nachdem, was Ihre Permalink-Struktur ist. Alle Änderungen an .htaccess helfen also wenig, da Wordpress sie für Sie hinzufügt/löscht und einen wp_redirect() nach .htaccess erledigt. Im schlimmsten Fall endet die Umleitungsschleife.

Eine Lösung ist, Wordpress Umleitung mit zu deaktivieren.

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

Sie sollten dies innerhalb einer if-Anweisung oder einer solchen, wo Sie eine Überprüfung für eine bestimmte Seite/Verzeichnis/etc. Wenn Sie das oben genannte direkt in Ihre Funktionsdatei einfügen, werden die Weiterleitungen von WordPress deaktiviert und wahrscheinlich die Dinge unterbrochen.

+0

Perfekt. Vielen Dank! –

Verwandte Themen