2010-12-14 20 views
8

Estoy dando URLs a personas en un sitio web, que realmente apuntan a algo feo (en el mismo sitio web).¿Está bien tener un archivo .htaccess muy largo?

http://www.mydomain.com/cool-URL
apunta en realidad a
http://www.mydomain.com/boring.php?id=478547&sessid=34734asdf7&otherboringdetails

tengo la intención de lograr esto modificando el archivo .htaccess cuando sea necesario. Voy a hacer que el script PHP escriba en el archivo .htaccess, agregue una nueva regla de reescritura cada vez que haya una nueva entrega de una url (desde un área de administración que un programador no puede controlar [especifique el título de la URL para este nueva entrada, admin: se asignará automágicamente]).

¿Esto va a ser un problema, especialmente después de 1000 URL más o menos? ¿Cuál es el número real que es aceptable? Porque, puedo imaginar esto: el servidor recibe una solicitud de una URL, luego busca en el archivo .htaccess la página correcta para esta url, y finalmente envía al usuario a la página correcta. Si esto es algo así como la búsqueda en la base de datos, puede tomar mucho tiempo para que el usuario realmente llegue a la página correcta ...

¿Alguna sugerencia sobre esto, por favor?

+0

Estoy interesado. – Trufa

Respuesta

18

No, no está bien y obstaculizará la velocidad de carga de la página.

.hc Los archivos htaccess se evalúan en TODAS las solicitudes del servidor. Incluso para imágenes estáticas, archivos CSS y JS. Entonces, le está pidiendo al servidor web que analice más de 1000 líneas posiblemente REGEX mientras ejecuta una solicitud.

Además, el archivo .htaccess del directorio principal también se procesa para los archivos que residen en el subdirectorio. Por lo tanto, si su .htaccess grande está en el directorio raíz del sitio web, se procesará para todas las solicitudes hechas para los archivos en los subdirectorios también (junto con el archivo .htaccess en el subdirectorio).

Que mi amigo está procesando mucho. Si tiene una página con 10 imágenes (por ejemplo) obtiene procesos 11 veces. Y mientras más procesamiento en el archivo, más ciclos toma. Entonces sí, cualquier cosa en un archivo htaccess tiene un impacto. Ahora es ese impacto notable? Es difícil decir cuándo se convierte en un problema. Pero tendría que ser bastante grande ya que el procesamiento es relativamente simple, lo que en su caso es.

La clave con un archivo htaccess es hacerlo inteligente. No querrás enumerar 200 entradas. Puedes hacerlo de manera inteligente con solo unas pocas líneas (si quieres usar htaccess).

+0

De acuerdo, investigaré para hacer la expresión regular correcta para mi problema. Gracias por la aclaración :) –

1

Debería estar bien. Es posible que experimente un retraso del servidor cuando sea realmente largo. Me gustaría ver las especificaciones de mod_rewrite, es posible que pueda automatizar los reenvíos con una línea de & función regex. No sé lo suficiente sobre las variables de la URL que se pasarán para darle un ejemplo.

5

Realizo una prueba simple: genere un archivo .htaccess grande con URL aleatorias, y mida el rendimiento resultante usted mismo.

import random,string 

def rand_string(): 
    length = random.randint(4,10) 
    res = [] 
    for i in range(length): 
     res.append(random.choice(string.letters)) 
    return ''.join(res) 

for i in range(1000): 
    print "RewriteRule %s http://www.mydomain.com/boring.php?%s [R]" % \ 
    (rand_string(), rand_string()) 
4

Tener tantas reglas es realmente desaconsejable. No es que estén en un archivo .htaccess o que se prueban para cada solicitud. (Dependiendo de la configuración, eso también podría suceder si los coloca en la configuración del servidor o del host virtual.)

Es el mero hecho de que es esa gran cantidad de reglas las que se prueban y, según las reglas, cada regla tiene que ser probado hasta que se encuentre una coincidencia.

Bueno, podría contrarrestar eso organizando las reglas en el orden de la probabilidad de coincidencia para que la probabilidad de encontrar una coincidencia anticipadamente sea alta. Pero su complejidad sigue siendo O (n) en el peor de los casos.

Si realmente necesita tantas asignaciones y las correlaciones son correctas, puede usar un RewriteMap hash file que tiene una complejidad de O (1) en lugar de O (n) para las reglas separadas. O cambias el mapeo a tu aplicación PHP y lo haces allí.

+0

Wow grandes consejos y gracias por el enlace! –

1

Definitivamente no está bien, como algunas personas aquí han mencionado.

¿Conoces todas las URL que deseas reescribir de antemano? De ser así, puede almacenar las reglas en alguna base de datos, repetir las reglas y pregenerar las URL actuales , y almacenarlas en Memcache, siendo la clave la URL atractiva y el valor la URL real del contenido.

Luego, cuando llegue la solicitud, busque la clave en Memcache y redirija al usuario a la URL real. Ni siquiera creo que necesites .htaccess para esto.

Cuestiones relacionadas