Estoy tratando de escribir algunas reglas mod_rewrite para generar miniaturas sobre la marcha. Entonces cuando esta url
example.com/media/myphoto.jpg?width=100&height=100
el script debe reescribirlo para
example.com/media/myphoto-100x100.jpg
y si el archivo existe en el disco, Apache lo sirve y, si no existe, se llama script para generar el archivo.
yo escribí esto
RewriteCond %{QUERY_STRING} ^width=(d+)&height=(d+)
RewriteRule ^media/([a-zA-Z0-9_-]+).([a-zA-Z0-9]+)$ media/$1-%1x%2.$2 [L]
RewriteCond %{QUERY_STRING} ^(.+)?
RewriteRule ^media/([a-zA-Z0-9_-._]+)$ media/index.php?file=$1&%1 [L]
Y obtengo redirecciones internas infinitas. La primera condición coincide y la regla se ejecuta, y justo después de eso obtengo una redirección interna.
Necesito un consejo para terminar este guión.
Gracias.
Respuestas
0 para la respuesta № 1Intenta usar esto para tu segunda condición:
RewriteCond %{REQUEST_FILENAME} !-f
"-f" (es un archivo regular) Trata el TestString como una ruta de acceso y prueba si existe y es un archivo normal.
0 para la respuesta № 2
Prueba estas reglas:
RewriteCond %{QUERY_STRING} ^width=(d+)&height=(d+)$
RewriteCond %{DOCUMENT_ROOT}/media/$1-%1x%2.$2 -f
RewriteRule ^media/([a-zA-Z0-9_-]+).([a-zA-Z0-9]+)$ media/$1-%1x%2.$2 [L]
RewriteCond $1 !=index.php
RewriteRule ^media/([a-zA-Z0-9_-]+.[a-zA-Z0-9]+)$ media/index.php?file=$1 [L,QSA]
La segunda condición de la primera regla comprueba si hay un archivo con ese nombre (-f
)