2010-01-05 13 views
5

Cuando escribo este "http://example.com/Hello%20There/", muestra la página de índice que es: "http://example.com/Hello%20There/index.html".Problema de barras inclinadas

Bueno, lo que quiero hacer es cuando el usuario escribe "http://example.com/Hello%20There" (así que como el primero, excepto que no tiene una barra al final).

Probé muchas cosas y expresiones especialmente regulares, pero nada funciona porque creo que que el servidor detiene el proceso de exp reg cuando encuentra un espacio ("% 20" en la URL).

yo probamos este 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] 

y también poner:

DirectorySlash On 

en el módulo "mod_dir" de Apache.

lo tanto, mi pregunta es: - ¿Cómo decirle al servidor para agregar una barra final cuando el usuario teclea una URL sin una barra diagonal; $

Respuesta

13

Puede hacer un personaje opcional añadiendo el ? cuantificador de esta manera:

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

Ahora ambos /foobar y /foobar/ sería reescrita para /foobar/index.html.

Pero sería mejor si se utiliza sólo una ortografía, con o sin la barra final, y redirigir el otro:

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

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

Estas reglas eliminar o agregar una barra diagonal que faltan y hacer una permanente redirigir

+0

Se perdió paréntesis en la segunda regla de reescritura. –

+0

Por favor, ¿cuál es la combinación final de reglas que se utilizará? Estoy realmente interesado con esta pregunta, y no puedo hacerlo funcionar bien ... Gracias –

1

Tuve el mismo problema, pero estaba usando mod_alias para configurar un subsitio. Resulta que necesitaba hacer un segundo alias sin la barra al final para que funcione correctamente. Se veía algo como esto:

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> 

En Ubuntu, tuve que editar el archivo /etc/apache2/mods-enabled/alias.conf con estas líneas, a continuación, reinicie Apache. No pude encontrar esta respuesta en ningún lugar de la web; Acabo de tropezar con él mismo ya que mod_rewrite no funcionaba y el comando DirectorySlash tampoco ayudaba. Estaba agregando un programa que no era de Drupal como subsitio en una instalación de Drupal, que fue lo que provocó toda esta locura en primer lugar ...

Cuestiones relacionadas