2009-03-20 38 views
6

Así que esto es lo que estoy tratando de hacer. Tengo un marco simple y estoy usando mod rewrite para reescribir las direcciones URL para que apunten a los archivos correctos. Tengo una carpeta de proceso que se encuentra dentro de la carpeta web (la carpeta web es donde están todos los archivos del sitio web real, como imágenes, css, etc.)..htaccess redirigir si el archivo no existe

Esto funciona muy bien, pero lo que estoy tratando de hacer ahora es tener un archivo default.php para procesar los formularios. El archivo funciona muy bien si apunto el formulario pero quiero poder apuntar el formulario a su archivo correcto y si el archivo no está allí, entonces usa el archivo predeterminado.php

Los formularios son creados por una clase y la acción está configurada para ir a proceso/{ID OF THE FORM} .php La idea es que cualquiera pueda crear un formulario usando la clase y si no necesitan hacer nada especial, el archivo default.php procesará el formar.

Me doy cuenta de que puedo simplemente configurar la clase de formulario para usar siempre el archivo default.php y luego en el archivo default.php puedo verificar si el archivo apropiado sale. Si lo hace, entonces utilizar ese archivo, si no lo hace entonces mantener el procesamiento de la forma, pero todavía estoy curioso por saber si algo como esto funcionaría en la reescritura mod:

RewriteRule ^process/([^/]*) /web/process/$1 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-f 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-d 
RewriteRule ^process/([^/]*) /web/process/default.php [L] 
+0

He [respondido] (http://stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-path-exists/471994#471994) una [pregunta] muy similar (http : //stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-file-path-exists). –

Respuesta

2

En general, debería tener sus llamadas RewriteCond antes de tu RewriteRule. La Regla se dispara si se cumplen los Conds.

+0

Sí, pero ¿cómo puedo volver a escribir el proceso/nombre de archivo en web/proceso/nombre de archivo y luego si la web/proceso/nombre de archivo no existe, lo tengo que ir a web/process/default? –

+0

¿Hay alguna situación que funcione para usted en la prueba? Parece que su lógica para el caso predeterminado es correcta, pero que la primera regla se puede ejecutar cada vez independientemente. –

14

Esta regla solo debe hacerlo:

RewriteCond %{DOCUMENT_ROOT}web/$0 !-f 
RewriteRule ^process/[^/]+$ web/process/default.php [L] 

Si la ruta solicitada no se puede asignar a un archivo existente, se deben volver a escribirse en el archivo predeterminado.

+2

+1 Parece que debería funcionar y es limpio y compacto. –

Cuestiones relacionadas