2014-12-09 3 views
11

Ist PHP eingebaute Server nicht nutzen. Htaccess? Macht Sinn, nehme ich an, da es nicht auf Apache (?) Beruht. Wie auch immer, es ist möglich, dem Server mitzuteilen, dass er diese Dateien nutzen darf. Kann er URL-Rewrites verarbeiten? Ich habe einige Projekte in Frameworks, die auf diesen Dateien beruhen.PHP eingebaut Server und. Htaccess Mod schreibt

APPLICATION_ENV=development php -S localhost:8000 -t public/

+0

'php -S' nicht Apache ist, warum sollte es keine Apache-Konfigurationsdateien lesen? –

+0

kann man sagen, dass man seinen 'Front Controller' mit' php -S ... public/index.php' –

+0

Yeh but .htaccess Dateien werden häufig in Anwendungen verwendet, so dass ich mich fragte, ob überhaupt PHP Server sie behandelt. Ich denke nicht. Es ist in Ordnung, auf einen Frontcontroller zu zeigen, aber wenn ich etwas wie/news/view/205 url neu schreiben will, kann ich das nicht. – Martyn

Antwort

5

Es ist nicht möglich PHP integrierten Webserver zu handhaben .htaccess verwenden (es wird nicht auf Apache angewiesen wird implementiert entierly in PHP-Kern). Sie können jedoch ein Router-Skript verwenden (hier beschrieben: http://php.net/manual/en/features.commandline.webserver.php).

z. php -S localhost -S localhost:8080 router.php

+0

dann müssen Sie .htaccess verwenden – unixmiah

+0

Sie können nicht .htaccess mit dem integrierten Server von PHP verwenden. Es wird nicht unterstützt. Wenn Sie .htaccess und nicht anders Ihren Webserver konfigurieren möchten, dann müssen Sie entweder Apache verwenden oder .htaccess selbst in PHP parsen (das wäre wahrscheinlich eine schwierige Sache) – Agares

+1

ahh das macht Sinn. Ja, ich stimme zu. – unixmiah

6

Hier ist der Router, den ich für den eingebauten PHP-Webserver verwende, der Assets aus dem Dateisystem bereitstellt, wenn sie vorhanden sind, und ansonsten eine Index.php-Datei neu schreibt.

Run mit:

php -S localhost:8080 router.php 

router.php:

<?php 

chdir(__DIR__); 
$filePath = realpath(ltrim($_SERVER["REQUEST_URI"], '/')); 
if ($filePath && is_dir($filePath)){ 
    // attempt to find an index file 
    foreach (['index.php', 'index.html'] as $indexFile){ 
     if ($filePath = realpath($filePath . DIRECTORY_SEPARATOR . $indexFile)){ 
      break; 
     } 
    } 
} 
if ($filePath && is_file($filePath)) { 
    // 1. check that file is not outside of this directory for security 
    // 2. check for circular reference to router.php 
    // 3. don't serve dotfiles 
    if (strpos($filePath, __DIR__ . DIRECTORY_SEPARATOR) === 0 && 
     $filePath != __DIR__ . DIRECTORY_SEPARATOR . 'router.php' && 
     substr(basename($filePath), 0, 1) != '.' 
    ) { 
     if (strtolower(substr($filePath, -4)) == '.php') { 
      // php file; serve through interpreter 
      include $filePath; 
     } else { 
      // asset file; serve from filesystem 
      return false; 
     } 
    } else { 
     // disallowed file 
     header("HTTP/1.1 404 Not Found"); 
     echo "404 Not Found"; 
    } 
} else { 
    // rewrite to our index file 
    include __DIR__ . DIRECTORY_SEPARATOR . 'index.php'; 
}