2009-06-12 19 views
11

Me gustaría usar mod_rewrite para crear URL bonitas, pero tengo una sola versión del archivo .htaccess que se puede usar para cualquier usuario en un servidor.¿Cómo hacer referencia al directorio actual desde .htaccess usando mod_rewrite?

hasta ahora tengo el estándar bastante .htaccess URL:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$  /index.php/$1 [L] 

Idealmente, me gustaría algo similar a

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

Esta documentación me llevaría a creer que lo que yo quiero no es es necesario:

Nota: Concordancia de patrones en cada directorio con texto Nunca olvide que Patrón se aplica a una URL completa en archivos de configuración por servidor. Sin embargo, en los archivos de configuración por directorio, el prefijo por directorio (que siempre es el mismo para un directorio específico) se elimina automáticamente para la coincidencia de patrones y se agrega automáticamente después de que se haya realizado la sustitución. Esta característica es esencial para muchos tipos de reescritura: sin esto, siempre tendría que coincidir con el directorio principal, que no siempre es posible.

aún así obtener un resultado erróneo, sin embargo, si pongo un líder/frente al index.php en el RewriteRule.

Este,

http://server/test/stream/stream

convierte en

http://server/index.php/stream

no

http://server/test/index.php/stream

cuando el archivo .htaccess está en/test /.

+0

también https://stackoverflow.com/q/4704508/632951 – Pacerier

Respuesta

2

Resulta que no importa si pongo un delante/delante de index.php o no. Al dejarlo, la secuencia de comandos funciona correctamente. Estuve probando con la bandera R que usaba directorios físicos en la redirección.

+0

Sí, pero ** ** [dejándolo fuera usted está confiando en el valor de rewritebase] (https://stackoverflow.com/a/11443194/632951), que ** no puede ** ser su carpeta padre htaccess. En cualquier caso, dejarlo apagado es una solución hackish no una solución real. – Pacerier

8

que estaba teniendo un problema similar, pero encontré que simplemente dejando fuera de la raíz '/' resultó en mi servidor web de prueba (xampp en las ventanas) que sirve una URL similar a:

http://localhost/C:/xampp/htdocs/sites/test/

No es perfecto. Mi solución es usar RewriteCond para extraer la ruta desde REQUEST_URI. He aquí un ejemplo para la eliminación de los no deseados "index.php" s desde el final de la URL:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

Nota: el signo de porcentaje en "% 1 /", en lugar de un signo de dólar.

% 1-% 9 obtiene los patrones de la última coincidencia de RewriteCond, $ 1- $ 9 obtiene los patrones de RewriteRule.

Ver: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

Saludos :)

Cuestiones relacionadas