2012-07-11 23 views
13

Estoy buscando desarrollar un sitio Drupal 7 usando el servidor incorporado de PHP. He ejecutado correctamente Drupal sin URL limpias (por ejemplo, index.php? Q =/about/) pero las URL limpias (por ejemplo, /about/) normalmente se basan en mod_rewrite o su equivalente. En los documentos que veo puede ejecutar el servidor de PHP con un archivo de enrutador de este modo:Sirviendo Drupal 7 con servidor PHP 5.4 incorporado

php -S localhost:8000 routing.php 

¿Qué debo poner en el routing.php para simular mod_rewrite?

+0

+1 para una pregunta interesante. Pero como se trata de una copia de desarrollo del sitio, ¿realmente necesita URL limpias? (Supongo que es una copia de desarrollo del sitio ... ¡no debería usar el servidor incorporado de PHP para un sistema en vivo! - vea http://php.net/manual/en/features.commandline .webserver.php) – SDC

+0

Sí, solo para dev. Implemento con Nginx y PHP-FPM. También hago un sitio de WordPress de vez en cuando y tendría el mismo problema. –

+1

¿Qué hay de malo en configurar nginx y php-fpm en su sitio de desarrollo? Debería tomar unos cinco minutos. –

Respuesta

7

La tarea consiste básicamente en codificar .htaccess de Drupal en PHP para su archivo router.php.

Aquí es un comienzo:

<?php 

if (preg_match("/\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)/", $_SERVER["REQUEST_URI"])) { 
    print "Error\n"; // File type is not allowed 
} else 
if (preg_match("/(^|\/)\./", $_SERVER["REQUEST_URI"])) { 
    return false; // Serve the request as-is 
} else 
if (file_exists($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) { 
    return false; 
} else { 
    // Feed everything else to Drupal via the "q" GET variable. 
    $_GET["q"]=$_SERVER["REQUEST_URI"]; 
    include("index.php"); 
} 

Esto debe ser considerado de calidad alpha. Representa una caminata de 3 minutos a través del archivo .htaccess de Drupal 7.14, evitando cualquier cosa que requiera más de 10 segundos de reflexión. :)

Sin embargo, me permite ejecutar el script de instalación de Drupal, con hojas de estilo, JS e imágenes cargadas como se esperaba, y acceder a las páginas de Drupal usando Clean URLs. Tenga en cuenta que al instalar Drupal en este entorno, que necesitaba a patch que pueden no formar parte de Drupal 7.

+0

Eso se ve bastante bien. Debe enviar un parche para tenerlo incluido en Drupal. –

+0

En solicitudes normales, SCRIPT_NAME es index.php, lo que significa que la última declaración else nunca se ejecutará. –

+0

@JasonChrista - sí. si estamos procesando una solicitud para 'index.php? q = admin', probablemente no queremos continuar. ¿No estoy viendo algo? – ghoti

3

que estaba buscando una solución a mí mismo y me encontré con uno de cada en el Drupal 8 issues:

Esto funciona muy bien para mí ahora en mi existente instalar Drupal 7 (s):

Guardar esto como .htrouter.php (o lo que usted desee) y se ejecutan en el directorio raíz de Drupal con:

php -S localhost:8080 .htrouter.php

<?php 
/** 
* @file 
* The router.php for clean-urls when use PHP 5.4.0 built in webserver. 
* 
* Usage: 
* 
* php -S localhost:8888 .htrouter.php 
* 
*/ 
$url = parse_url($_SERVER["REQUEST_URI"]); 
if (file_exists('.' . $url['path'])) { 
    // Serve the requested resource as-is. 
    return FALSE; 
} 
// Remove opener slash. 
$_GET['q'] = substr($url['path'], 1); 
include 'index.php'; 

(fragmento construido a partir de https://drupal.org/files/router-1543858-3.patch)

3

Ahora puede iniciar más fácilmente un servidor con el comando:

drush runserver

+0

Esta es la única respuesta que funcionó para mí. 'drush' debe ser un alias o un enlace simbólico a' drush.phar'; de lo contrario, se produce un error al no poder encontrar un archivo dentro del archivo phar. – contrebis

Cuestiones relacionadas