2009-07-25 22 views
11

Estoy escribiendo un CMS en PHP, y ahora estoy trabajando en la función de temas. Tengo un archivo .htaccess:Apache mod_rewrite solo si la solicitud no comienza con '/ THEMES /'

RewriteEngine ON 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2 

Si tengo una solicitud a:

/page 

se debe cargar la función de vista de la página de clase llamada.

Si tengo una solicitud a:

/page/test 

debe cargar la función de vista de la página de clase llamada, con la 'prueba' parámetro. Todo esto funciona,

Pero yo quiero que se aplican las RewriteRules SOLO Si la solicitud NO comienzo con:

/THEMES/ 

Así que puedo aplicar estilos CSS, etc ...

¿Alguien puede ayudarme? Gracias.

Respuesta

11

Se puede usar una regla adicional para detener el proceso de reescritura:

RewriteRule ^THEMES/ - [L] 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2 
+3

Es bueno saber que puede reescribir a - para preservar una URL/patrón dado – eyelidlessness

+0

Gracias hombre. Esto funcionó. –

+0

Creo que la primera regla debería comenzar con '^ /' – Behrang

22

Añadir esto antes de sus reglas de reescritura:

RewriteCond %{REQUEST_URI} !^/THEMES/ 
+0

Aunque la solución @Gumbo funciona, la suya es más elegante ... – NemoStein

0

Si desea incluir archivos css/js durante el uso de URL- reescribiendo use esa etiqueta para especificar la url principal.

< base href="http://www.your-web-site-adress.com" > 

entonces puede incluir fácilmente sus archivos css/js así:

< script src="/blabla.js" > 

que añadiremos href base como prefijo.

1

hacer algo como:

RewriteRule ^THEMES - [L] 

Eso quiere decir: si la solicitud se inicia con temas, simplemente sirven.

Otra solución posible es:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

Eso significa: no volver a escribir si la solicitud se resuelve en un archivo existente (primera línea) o directorio (segunda línea).

Quizás deberías leer la documentación, está muy bien escrita.

+0

La segunda no funcionó. –

+0

¿Está seguro de que existe el archivo/directorio solicitado? Me parece extraño, funciona en mi sistema. – sydarex

Cuestiones relacionadas