2010-01-05 9 views
5

Wenn ich diese "http://example.com/Hello%20There/" eintippe, zeigt es die Indexseite an, die ist: "http://example.com/Hello%20There/index.html".Nachlauf Schrägstriche Problem

Nun, was ich tun möchte, ist, wenn der Benutzer "http://example.com/Hello%20There" (so wie die erste, außer es hat keinen abschließenden Schrägstrich) eingibt.

Ich habe viele Dinge und besonders reguläre Ausdrücke versucht, aber nichts funktioniert, weil ich denke , dass der Server den Prozess reg exp stoppt, wenn er ein Leerzeichen findet ("% 20" in der URL).

Ich habe versucht, diese reg exp:

Options +FollowSymLinks 
rewriteEngine On rewriteCond %{REQUEST_URI} ^(.*)\ (.*html)$ 
rewriteRule ^.*$ %1-%2 [E=space_replacer:%1-%2] 
rewriteCond %{ENV:space_replacer}!^$ 
rewriteCond %{ENV:space_replacer}!^.*\ .*$ 
rewriteRule ^.*$ %{ENV:space_replacer} [R=301,L] 

und auch setzen:

DirectorySlash On 

im "mod_dir" Modul von Apache.

Also, meine Frage ist: - Wie an den Server anweisen, einen Schrägstrich, wenn der Benutzer eine URL ohne einen Schrägstrich zu addieren; $

Antwort

13

Sie ein Zeichen optional machen, indem die ? Anhänge quantifier es wie folgt aus:

RewriteRule ^([^/]+)/?$ $1/index.html 

Nun sind beide /foobar und /foobar/ würde /foobar/index.html neu geschrieben werden.

Aber es wäre besser, wenn Sie nur eine Schreibweise, mit oder ohne Schrägstrich, und leitet die andere:

# remove trailing slash 
RewriteRule (.+)/$ /$1 [L,R=301] 

# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$1/ [L,R=301] 

Diese Regeln entweder entfernen oder einen fehlenden Schrägstrich hinzufügen und ein permanenten tun umleiten.

+0

Sie Klammern in der zweiten Rewrite-Regel verpasst. –

+0

Bitte, welches ist die endgültige Kombination der zu verwendenden Regeln? Ich bin wirklich interessiert an dieser Frage, und ich kann es nicht richtig laufen lassen ... Danke –

1

Ich hatte das gleiche Problem, aber ich verwendete mod_alias, um eine Unterwebsite einzurichten. Es stellte sich heraus, dass ich einen zweiten Alias ​​ohne den abschließenden Schrägstrich erstellen musste, damit er korrekt funktioniert. etwas sah wie folgt aus:

Alias /forum/ "/var/www/forum" 
Alias /forum "/var/www/forum" 

<Directory "/var/www/forum"> 
    Options FollowSymlinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

In Ubuntu, ich mit diesen Zeilen /etc/apache2/mods-enabled/alias.conf Datei bearbeiten musste, dann Apache neu starten. Konnte diese Antwort nirgendwo im Internet finden; Ich bin gerade selbst darauf gestoßen, da mod_rewrite nicht funktionierte und auch der DirectorySlash-Befehl nicht half. Ich habe ein Nicht-Drupal-Programm als Unterwebsite unter einer Drupal-Installation angehängt, was den ganzen Wahnsinn an erster Stelle ausgelöst hat ...

Verwandte Themen