2010-10-27 10 views
11

¿Cómo puedo buscar una instancia para ciertas extensiones de archivos, como. (Jpg | png | css | js | php), y si NO hay una coincidencia enviarla a index.php ? ruta = $ 1.reescritura en htaccess para que coincida con ciertas extensiones de archivos

Me gustaría poder permitir períodos de nombres de usuario personalizados.

Así, reescribir http://example.com/my.name a index.php ruta = my.name

configuración actual:

.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)$ index.php?route=$1 [QSA,L] 
</IfModule> 

Lo que funciona:?
http://example.com/userpage -> index.php ? route = userpage
http://example.com/userpage/photos -> index.php? route = userpage/fotos
http://example.com/file.js ->http://example.com/file.js
http://example.com/css/file.css ->http://example.com/css/file.css

Lo que necesito para trabajar además de lo anterior:
http://example.com/my.name -> index.php ruta = my.name

Respuesta

19

Agregue un RewriteCond adicional para excluir las condiciones que no desea volver a escribir. Use un ! antes de la expresión regular para indicar que cualquier archivo que coincida debe fallar la condición. El RewriteCond a continuación no se ha probado, pero debe darle una idea de lo que necesita:

RewriteCond %{REQUEST_URI} !\.(jpg|png|css|js|php)$ 
+0

¡Intenté esto y tiene sentido, pero no está funcionando! – wdavis

+0

Combine esto con _allowing_ a dot en names/routes (por lo tanto, reemplazando '[^.]' Con '.' en la' RewriteRule' original de su pregunta). A.t.m, no permites con fuerza un punto allí, por lo que, por supuesto, no va a funcionar. – Wrikken

+0

Ah, tienes razón Wrikken. Modificó la regla y se unió. Realmente aprecio la ayuda chicos – wdavis

5

¿Ha intentado revertir la lógica? Algo así como

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule \.(jpg|png|css|js)$ - [L] 

Esto no va a hacer una reescritura para cualquier archivo con un .jpg, .png, Css, o la extensión .js. A continuación, agregue las reglas existentes para que las solicitudes que no sean de archivo y que no sean de directorio se redirijan a index.php.

+0

Gracias por la entrada de Harper, esto ayudó a conseguirlo resuelto – wdavis

+0

sólo recuerda que f es terrible lenta en entornos de alta carga como este requiere un acceso al sistema de archivos. ¡checkin 'REQUEST_URI' es mucho más rápido! –

Cuestiones relacionadas