2010-03-01 20 views
12

Usando Apache 2.2 y PHP 5, ¿cuál es la mejor manera de ejecutar PHP sin la extensión .php. Por ejemplo, tengo un script llamado app.php y me gusta invocar comoEjecutando PHP sin extensión sin usar mod_rewrite?

http://example.com/app

Tenga en cuenta que todavía quiero mantener la extensión .php al archivo y no tengo mod_rewrite. No quiero usar index.php porque requiere demasiados directorios.

Lo que encontrar una forma añadiendo esto a mi .htaccess,

AddHandler server-parsed .php 
SetHandler application/x-httpd-php 
AddHandler application/x-httpd-php .php 

La página se ejecuta un poco más lento a través de este. Sospecho que invoca SSI en cada página de PHP. Me pregunto si hay formas mejores de lograr esto.

+0

he visto este hecho mediante una directiva '' pero usted es mucho menos probable conseguir que se ejecuta en un compartida ambiente que 'mod_rewrite', creo. –

+2

Personalmente, me gustaría dejar caer suficientes pistas sobre "rendimiento degradante" y "¡le estoy dando todo lo que tiene, Capitán!" hasta que instalaron mod_rewrite. – Xorlev

Respuesta

25

Una alternativa es usar content negotiation. A su vez en multiviews:

Options +MultiViews 

Si no existe un recurso con nombre, Apache glob para el archivo, a continuación, ordenar en base al tipo de medio y codificación de contenido requerimientos enviados por el navegador. Si solo hay un archivo (su script PHP), entonces es a lo que se dirige la URL.

+0

Resulta que mod_negociación está instalada en todos los servidores. Esta es la mejor solución que he encontrado hasta ahora. No hay una diferencia de rendimiento notable al hacer esto tampoco. ¡Gracias! –

+2

Esto sigue siendo relevante, y es posible que tenga que añadir "AddType application/x-httpd-php .php .phtml .html .htm" a "/ etc/apache2/mods-enabled/MIME .conf: " – mckenzm

+1

@mckenzm: los archivos .html y .htm no deben interpretarse como PHP. 'AddType' solo debe usarse para establecer el tipo MIME de un recurso, no un manejador. Para eso, hay 'AddHandler' (que incluso funciona cuando PHP se ejecuta a través de CGI). – outis

-1

La respuesta corta es que no podrá hacer esto de la manera que desee. PHP va a necesitar ALGUNA extensión para ejecutar los archivos, así que puede dejarlo como * .php.

A menos que use mod_rewrite, tendrá que llamar a los archivos usando el archivo completo y la extensión.

Esa es la belleza de mod_rewrite: te permite hacer tal cosa.

Me gustaría hacerte la pregunta de nuevo - ¿por qué no puedes usar mod_rewrite? ¿Es un problema ambiental, una opción, estás usando Lighttpd (lighty)?

Extensión

Envuelva sus reglas de reescritura en algo como esto para evitar que la voladura de si el servidor no es compatible con mod_rewrite:

<IfModule mod_rewrite.c> 
// DO REWREITE HERE 
</IfModule> 

Si usted cree que sea un problema de seguridad o algo igualmente válido, entonces también podría hacer la siguiente verificación y enviarla a un 404 personalizado o incluso a su documentación y darles ejemplos de cómo habilitar mod_rewrite y explicar la necesidad, etc. Sin embargo, este segundo cheque es opcional. no lo use, los usuarios simplemente verán la extensión .php bu Tus páginas deberían funcionar.

<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /application/errors/404.php 
    // ERROR 404 ABOVE OR DO ANOTHER DIRECT REDIRECT TO AN INFORMATION PAGE 
</IfModule> 
+0

Por algún motivo, mod_rewrite no está instalado en algunos de los servidores en los que se ejecutará el sitio. Ya lo tengo trabajando sin extensión.Solo me pregunto si hay formas más rápidas que no recurran a SSI. –

+0

@ZZ Coder - Alguien puede tener algo de magia para usted, pero lo dudo - He intentado esto antes y nunca he encontrado una solución válida. ¿Es posible dejarles saber a las personas que si su servidor no es compatible con mod_rewrite, entonces verán la extensión PHP? Vea mi edición para saber cómo evitar que .htaccess explote si mod_rewrite no está habilitado. Así es como funcionan cosas como wordpress y les va bien. – Shane

7

También puede forzar el tipo MIME de un archivo específico en su .htaccess:

<Files app> 
ForceType application/x-httpd-php 
</Files> 
+0

Esto necesita más votos positivos. –

Cuestiones relacionadas