2011-11-29 6 views
6

La instalación deApache reescritura excepción de no incluir directorios específicos

Mi disposición es tener recursos compartidos por dos o más sitios que tienen estructuras similares aunque diferentes contenidos. En el ejemplo ...

http: // localhost/sitio1/

http: // localhost/sitio2/

Hay dos tipos de reescrituras, contenidos CMS (más o menos contenido simplemente que se repite fuera de la página) y módulos especiales (por ejemplo, módulo de software de blog) donde tengo un software que se usa para un manejo más específico del contenido de la base de datos.

Así que la primera regla de reescritura para el blog se asegura de que el módulo de blog maneja las solicitudes blog ....

http: // localhost/sitio1/blog/*

http: // localhost/sitio2/blog/*

... usando el software del módulo de blog encontrar en ...

http: // localhost/blog/

la regla de reescritura CMS pretende h andle peticiones de módulos no específicos ...

http: // localhost/sitio1/*

http: // localhost/sitio2/my_page.html *

... usando el CMS reescribir el software situada en ...

http: // localhost/rewrite.php

El problema

El módulo de blog y las reescrituras del módulo CMS son conflictivas. Intenté hacer una excepción usando la siguiente regla. Aquí está mi código ...

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.js$ 
RewriteRule .*/blog(.+) blog$1 [QSA] 
RewriteRule !.*/(admin|blog|forums)(.+)$ rewrite.php 

La última regla no funciona realmente. Con este código si accedo ..

http: // localhost/sitio1/blog/*

http: // localhost/sitio2/blog/*

... cualquier blog (o administrador o foros) La URL de cualquier sitio aún se está reescribiendo para trabajar con localhost/rewrite.php.

Entonces, ¿Cómo ajusto la última regla para cumplir con las siguientes condiciones por favor ...

1.) El primer directorio (sitio1 o sitio2 en localhost/sitio1/blog) sigue siendo dinámico para poder añadir una tercera sitio si lo quiero sin tener que reajustar el código por algún motivo en ese sentido.

2.) Que el índice de blog (o administrador o foro) (p. Ej. Blog /, forums /, admin /) se maneja con sus propios módulos y con cualquier elemento dentro de esos directorios (ej. Admin/1, admin/test.html) independientemente del código HTTP, 200, 404, etc.

3.) Cualquier URL que no se encuentre en la lista de excepciones de la última regla es manejada por rewrite.php (independientemente del código HTTP, 200, 404, etc.).

4.) localhost/site1/blog/no es manejado por rewrite.php y localhost/site1/random_path no es manejado por la reescritura del módulo de blog.

Estaré encantado de responder rápidamente con cualquier aclaración adicional.

Respuesta

6

Gracias a un RewriteCond anterior, alguien escribió que tenía sentido, lo adapté y funcionó muy bien.

Nota: si alguien decide usar este código, aparentemente las condiciones solo funcionan DESPUÉS de las reglas de reescritura específicas para los módulos (admin, blog, foros) ANTES de la regla rewrite.php de CMS.

Me complacerá honrar cualquier crítica positiva.

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.(css|js|zip)$ 

RewriteRule .*/admin(.+) admin$1 [QSA] 
RewriteRule .*/blog(.+) blog$1 [QSA] 
RewriteRule .*/forums(.+) forums$1 [QSA] 

#individual... 
RewriteCond %{REQUEST_URI} !.*/admin 
RewriteCond %{REQUEST_URI} !.*/blog 
RewriteCond %{REQUEST_URI} !.*/forums 

#condensed... 
RewriteCond %{REQUEST_URI} !.*/(admin|blog|forums) 

RewriteRule !\.(css|js|zip)$ rewrite.php 
Cuestiones relacionadas