2010-01-05 7 views
5

Lorsque j'écris ce "http://example.com/Hello%20There/", la page d'index est affichée: "http://example.com/Hello%20There/index.html". Eh bien, ce que je veux faire est quand l'utilisateur tape "http://example.com/Hello%20There" (donc comme le premier sauf qu'il n'a pas de barre oblique).Problème de barres obliques de fin de fichier

J'ai essayé beaucoup de choses et expressions spécialement régulières, mais rien ne fonctionne parce que je pense que le serveur arrête le processus reg exp quand il trouve un espace ("% 20" dans l'URL).

J'ai essayé 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] 

et aussi mettre:

DirectorySlash On 

dans le module "mod_dir" d'Apache.

Alors, ma question est: - Comment dire au serveur d'ajouter une barre oblique lorsque l'utilisateur tape une url sans barre oblique de fin

$

Répondre

13

Vous pouvez faire un caractère facultatif en ajoutant le ? quantificateurs à elle comme ceci:

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

maintenant, les deux /foobar et /foobar/ serait réécrite à /foobar/index.html.

Mais ce serait mieux si vous utilisez une seule orthographe, avec ou sans la barre oblique et rediriger l'autre:

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

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

Ces règles supprimer ou ajouter un slash manquant et faire un permanent réorienter.

+0

Vous avez manqué entre parenthèses dans la deuxième règle de réécriture. –

+0

S'il vous plaît, quelle est la dernière combinaison de règles à utiliser? Je suis vraiment intéressé par cette question, et je ne peux pas la faire fonctionner correctement ... Merci –

1

J'ai eu le même problème, mais j'utilisais mod_alias pour configurer un sous-site. Il s'avère que j'avais besoin de faire un deuxième alias sans la barre oblique finale pour que cela fonctionne correctement. Vu quelque chose comme ceci:

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> 

Dans Ubuntu, je devais modifier le fichier /etc/apache2/mods-enabled/alias.conf avec ces lignes, puis redémarrez apache. Impossible de trouver cette réponse n'importe où sur le Web. Je suis tombé dessus moi-même comme mod_rewrite ne fonctionnait pas et la commande DirectorySlash n'a pas aidé non plus. J'ajoutais un programme non-Drupal en tant que sous-site sous une installation Drupal, ce qui a d'abord déclenché toute cette folie ...

Questions connexes