2009-06-30 7 views
5

Me gustaría trabajar con páginas sin barras inclinadas. Así que ahora quiero que mi URL con una barra al final se redirija (usando .htaccess) a la misma URL sin la barra al final.Eliminar barras diagonales

Tengo dos archivos .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

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

y uno en mi carpeta pública:

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> 

He intentado añadir la siguiente regla en el fichero .htaccess en la carpeta pública:

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

Pero luego: example.com/public/page/view/2/

redireccionamientos a: example.com/**D:/webserver/**public/page/view/2

que es obviamente no es lo que quiero ...

+0

No estoy seguro de cómo solucionar su problema, pero no estoy seguro de si esto es realmente lo que debe hacer. Según entiendo, al solicitar una URL como esta: http://www.example.com/myDir redirige al usuario a http://www.example.com/myDir/. Esta redirección adicional podría evitarse con la barra al final. Esa barra identifica definitivamente que "myDir" es un directorio en lugar de un archivo. – nikmd23

+0

¿Está diciendo que la barra inclinada final es parte de alguna notación formal/estándar/predeterminada? En ese caso, tengo una pregunta similar. ¿Cómo puedo redireccionar para agregar la barra inclinada final ;-) – Erik

+0

Como en realidad no está tratando de redirigir a un directorio, la barra inclinada final no lo ayuda en absoluto, de hecho, no hace nada de una manera o de la otra. otro. Debería ir con lo que sea feliz y ser consistente en su uso – Fake51

Respuesta

1

¿por qué y ¿Tienes varios archivos .htaccess? ¿Dónde están los redirigidos a públicos/$ 1 almacenados? Es posible que se esté enfrentando a directivas RewriteRule que le complican las cosas.

Sin conocer su configuración, es bastante difícil decir cómo debería usar las reescrituras. ¿Puede especificar qué aspecto tienen REALMENTE?

+0

Lo he reducido a un solo archivo .htaccess. Al depurar me di cuenta de que algunos navegadores agregaron la barra inclinada automáticamente debido a un historial de páginas visitadas. Borrando mi historial de internet, agregando un rewritecond y reescritura me hizo el truco. – Erik

1

has necesitado añadiendo :

RewriteBase /public 

al archivo .htaccess en la carpeta pública, para obtener:

<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

Acabo de intentarlo, pero no lo redireccionará. – Erik

+0

¿Quiere decir que redirige sin esta línea, pero no la redirecciona? Además, no está claro a partir de su pregunta dónde coloca su 'RewriteRule (. *)/$ $ 1 [R, L]' en el archivo '.htaccess'. –

+0

Con su código obtengo los siguientes resultados: example.com/page/view/1 >> error 404 example.com/page/view/1/ >> Redirects to example.com/public/page/ ver/1 y que muestra un mensaje 404 – Erik

1

Aquí está un ejemplo de la documentación de Apache que se puede utilizar para resolver el problema:

Arrastrando problema raya vertical

Descripción:

Cada webmaster puede cantar una canción sobre el problema de la la barra inclinada de las URL que hace referencia a los directorios. Si faltan, el servidor arroja un error, porque si dices/~ quux/foo en lugar de/~ quux/foo/entonces el servidor busca un archivo llamado foo. Y debido a que este archivo es un directorio, se queja. En realidad, trata de arreglarlo solo en la mayoría de los casos, pero a veces este mecanismo debe ser emulado por usted. Por ejemplo después de haber hecho una gran cantidad de reescritura de URL complicadas a los scripts CGI etc.

Solución:

La solución a este problema es sutil para que el servidor de añadir la barra final automáticamente. Para hacer esto correctamente, tenemos que usar un redireccionamiento externo, de modo que el navegador solicite las imágenes subsiguientes, etc. Si solo realizáramos una reescritura interna, esto solo funcionaría para la página del directorio, pero podría salir mal cuando se incluyan imágenes en esta página. con URL relativas, porque el navegador solicitaría un objeto alineado. Por ejemplo, una solicitud de image.gif en /~quux/foo/index.html se convertiría en /~quux/image.gif sin la redirección externa.

lo tanto, para hacer este truco escribimos:

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

El loco y perezosa incluso puede hacer lo siguiente en el archivo .htaccess de nivel superior de su directorio home. Pero tenga en cuenta que esto crea una sobrecarga de procesamiento.

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

Source

2

Wordpress redirige dependiendo de lo que su estructura de enlaces permanentes es. Por lo tanto, cualquier cambio en .htaccess ayuda poco, ya que Wordpress los agregará/eliminará por usted y cumplirá un wp_redirect() después de que .htaccess haya realizado las cosas. En el peor de los casos, terminas con un bucle de redirección.

Una solución es desactivar el redireccionamiento de Wordpress usando.

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

Debe envolver esto dentro de una declaración if o tal que realice una comprobación para una determinada página/directorio/etc. Poner lo anterior directamente en su archivo de funciones desactivará las redirecciones de WordPress y probablemente rompa cosas.

+0

Perfecto. ¡Gracias! –

Cuestiones relacionadas