2012-07-11 5 views
13

Ich bin auf der Suche nach einer Drupal 7 Website mit PHP integrierten Server zu entwickeln. Ich habe Drupal erfolgreich ohne saubere URLs laufen lassen (z. B. index.php? Q =/über/), aber saubere URLs (z. B. /about/) verlassen sich normalerweise auf mod_rewrite oder sein Äquivalent. In der Dokumentation ich sehe, Sie können den PHP-Server mit einer Router-Datei wie so laufen:Serving Drupal 7 mit integriertem PHP 5.4 Server

php -S localhost:8000 routing.php 

Was soll ich in den routing.php mod_rewrite zu simulieren?

+0

+1 für eine interessante Frage. Aber da dies eine Entwicklungskopie der Website ist, benötigen Sie wirklich saubere URLs? (Ich gehe davon aus, dass es sich um eine Entwicklungskopie der Site handelt. Sie sollten den integrierten PHP-Server nicht für ein Live-System verwenden! - siehe http://php.net/manual/en/features.commandline .webserver.php) – SDC

+0

Ja, nur für dev. Ich implementiere mit Nginx und PHP-FPM. Ich mache auch hin und wieder eine WordPress-Seite und es würde das gleiche Problem haben. –

+1

Was ist los mit der Einrichtung von nginx und php-fpm auf deiner Dev-Seite? Es sollte ungefähr fünf Minuten dauern. –

Antwort

7

Die Aufgabe besteht darin, Drupal's .htaccess in PHP für Ihre router.php Datei zu kodieren.

Hier ist ein Anfang:

<?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"); 
} 

Dies sollte alpha Qualität betrachtet werden. Es ist ein 3-minütiger Spaziergang durch die .htaccess-Datei von Drupal 7.14, die alles überspringt, was mehr als 10 Sekunden gedanklich benötigt. :)

Es erlaubt mir jedoch, Drupal's Installationsskript zu starten, wobei Stylesheets, JS und Bilder wie erwartet geladen werden, und Drupal-Seiten mit sauberen URLs zu treffen. Beachten Sie, dass zu Drupal in dieser Umgebung installieren, brauchte ich a patch, die nicht Teil von Drupal werden kann 7.

+0

Das sieht ziemlich gut aus. Sie sollten einen Patch senden, damit dieser in Drupal enthalten ist. –

+0

Bei normalen Anfragen ist SCRIPT_NAME index.php, was bedeutet, dass die letzte else-Anweisung niemals ausgeführt wird. –

+0

@JasonChrista - ja. Wenn wir eine Anfrage für "index.php? q = admin" bearbeiten, wollen wir wahrscheinlich nicht weiter fortfahren. Sehe ich nicht etwas? – ghoti

3

Ich war auf der Suche nach einer Lösung mich und ich fand man in in der Drupal 8 issues:

Dies funktioniert gut für mich jetzt in meinem vorhandenen Drupal 7 installieren (s):

speichern als .htrouter.php (oder was auch immer Sie möchten) und in Ihrem Drupal root dir laufen mit:

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'; 

(Ausschnitt aus https://drupal.org/files/router-1543858-3.patch gebaut)

3

Sie können nun leichter einen Server mit dem Befehl starten:

drush runserver

+0

Dies ist die einzige Antwort, die für mich funktionierte. 'drush' muss ein Alias ​​oder ein Symlink zu' drush.phar' sein, sonst erhalten Sie einen Fehler, weil Sie keine Datei im phar finden können. – contrebis