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';
}
'php -S' nicht Apache ist, warum sollte es keine Apache-Konfigurationsdateien lesen? –
kann man sagen, dass man seinen 'Front Controller' mit' php -S ... public/index.php' –
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