Ecco il router che utilizzo per il webserver php integrato che serve risorse dal filesystem se esistono e altrimenti esegue una riscrittura in un file index.php.
Run utilizzando:
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';
}
'-s' php non è Apache, perché dovrebbe leggere qualsiasi file di configurazione di Apache? –
puoi dire al server il tuo 'front controller' di' php -S ... public/index.php' –
Yeh ma i file .htaccess sono comunemente usati nelle applicazioni quindi mi chiedevo se il server PHP li avesse gestiti. Non credo. Puntare a un front controller va bene, ma quando voglio riscrivere qualcosa come/news/view/205 url al momento non posso. – Martyn