mod_rewrite agregar barra inclinada final y pasar a index.php

Cuando solicito mi sitio web, trato de agregar una barra inclinada a la URL y luego pasarla a index.php como parámetro usando mod_rewrite.

My .htaccess archivo tiene este aspecto:

RewriteEngine On    

#Add trailing slash
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R]

#Pass to index.php
RewriteRule ^(.*)/$ index.php?p=$1

Y en mi index.php el archivo solo genera el parámetro:

<?php echo $_GET["p"]; ?>

Pero cuando escribo en la barra de direcciones cualquier cosa excepto http://mydomain.com/, Por ejemplo http://mydomain.com/contact, la php siempre salidas http://mydomain.com/index.php. Así que, http://mydomain.com/index.php se pasó de alguna manera como el parámetro en lugar de la página solicitada, como contact, pero no se porque...

Además, cuando edito

RewriteRule ^(.*)/$ index.php?p=$1

a

RewriteRule ^(.*)/$ /index.php?p=$1

y escribo URL, por ejemplo mydomain.com/contact Apache me da 302 Found y un enlace a donde se movió, pero enlaza con la misma página...

¿Algunas ideas?

Gracias.

preguntado el 27 de julio de 12 a las 15:07

1 Respuestas

Apache tiene una buena redacción larga para esto específicamente.

Problema de barra inclinada final

Cada webmaster puede cantar una canción sobre el problema de la barra diagonal final en los directorios de referencia de URL. Si faltan, el servidor arroja un error, porque si dice /~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, intenta solucionarlo por sí mismo en la mayoría de los casos, pero a veces este mecanismo debe ser emulado por usted. Por ejemplo, después de haber realizado muchas reescrituras de URL complicadas en scripts CGI, etc. Solución:

La solución a este sutil problema es permitir que el servidor agregue la barra al final automáticamente. Para hacer esto correctamente, tenemos que usar una redirección externa, para que el navegador solicite correctamente las imágenes posteriores, etc. Si solo hiciéramos una reescritura interna, esto solo funcionaría para la página del directorio, pero saldría mal cuando se incluyan imágenes en esta página. con URL relativas, porque el navegador solicitaría un objeto en línea. Por ejemplo, una solicitud de image.gif en /~quux/foo/index.html se convertiría en /~quux/image.gif sin la redirección externa.

So, to do this trick we write:

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

Los locos y perezosos pueden incluso hacer lo siguiente en el archivo .htaccess de nivel superior de su homedir. Pero tenga en cuenta que esto crea una sobrecarga de procesamiento.

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

Se puede encontrar aquí:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Respondido 27 Jul 12, 15:07

"Si [la barra diagonal] falta, el servidor arroja un error" Debe estar hablando de servidores Windows, porque en Linux ambos casos son iguales: cd /home == cd /home/ (lo mismo es válido para las URL) - Feeela

Tengo la adición automática de shash desactivada con DirectorySlash Off directiva, pero la reescritura sigue sin funcionar... - más largo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.