2011-03-29 14 views
27

Debo hacer un pequeño truco para un sitio. La idea es:.htaccess url-rewrite si el archivo no existe

  • si existe un archivo de una URL requerida a continuación, voy a esa URL, sin hacer nada más;
  • si no existe un archivo para una url requerida, debo ir a un archivo.php y luego hacer algo, ¡pero NO cambiar la url!

ejemplo:

www.mysite.com/page1.htm -> existe -> ir a presentar pagina1.htm

www.mysite.com/page2.htm -> NO existe - > ir al archivo default.php pero con url "www.misitio.es/page2.htm"

¿Es posible hacer esto todo por .htaccess?

+1

Además, entréguese un [nombre de usuario significativo] (http://tinyurl.com/so-hints). Una ventaja de esto es que otros pueden usar [at-replies] (http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work) para dirigirse a usted en sus comentarios y obtendrá un notificación de que alguien se dirigió a usted en un comentario. – outis

+0

Thx para sugerencias. No siempre estoy en este sitio. Trataré de corregir mis errores :) – Kiavor

Respuesta

60
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /default.php [L] 
5

Implemente una regla de error 404. No requiere mod_rewrite:

ErrorDocument 404 /default.php 
+0

Esto también es genial si quieres usar un respaldo HTML5 sin estropear las llamadas al estilo de descanso a php como 'http: // example.com/app.php/some/resource'. –

+0

¡En realidad cambié a esto y funcionó aún mejor! –

+0

Esto NO es lo que quieres. Esto enviará un encabezado de estado HTTP 404 (archivo no encontrado) al navegador (y a Google). Así que solo úsela para una página útil 'archivo no encontrado'. –

8

No se menciona aquí, pero FallbackResource es el nuevo método recomendado para el manejo de not-found (404) URL. Ejemplo:

FallbackResource /not-404.php 

De manual de Apache:

Usar esta opción para definir un controlador para cualquier URL que no se asigna a cualquier cosa en su sistema de archivos, y que en caso contrario devuelve HTTP 404 (no encontrado)

+0

Es importante tener en cuenta que he descubierto que esto puede romper algunas URL de estilo REST procesadas en el servidor, como: 'http: // example.com/app.php/some/resource'. –

+0

Eso no es correcto. El comportamiento de 'FallbackResource' será el mismo que' ErrorDocument'. Si 'PATH_INFO' está habilitado,'/app.php/some/resource' funciona perfectamente y lo he probado en mi Apache. – anubhava

+0

¿Dónde se habilita PATH_INFO? –

Cuestiones relacionadas