Si estás usando Apache puedes utilizar un .htaccess para esto:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
#RewriteBase /ruta/a/tu/aplicación
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Nota
Si tu sitio no está a nivel raíz del servidor web, tienes que quitar el comentario de la declaración RewriteBase y ajustar la ruta para que apunte al directorio, relativo a la raíz del servidor web.
Alternativamente, si utilizas Apache 2.2.16 o más reciente, puedes usar la Directiva FallbackResource para hacer tu .htaccess aún más sencillo:
FallbackResource /index.php
Nota
Si tu sitio no está a nivel raíz del servidor web, tienes que ajustar la ruta para que apunte a tu directorio, relativo desde el directorio web raíz.
Si estás utilizando nginx, configura tu vhost para remitir los recursos inexistentes a index.php:
server {
# la raíz del sitio es redirigida al guión de arranque de la aplicacion
location = / {
try_files @site @site;
}
# todas las otras ubicaciones primero prueban otros archivos y
# van a tu controlador frontal si ninguno de ellos existe
location / {
try_files $uri $uri/ @site;
}
# devuelve 404 para todos los archivos php cuándo existe un controlador frontal
location ~ \.php$ {
return 404;
}
location @site {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
# descomentalo al ejecutarlo vía https
#fastcgi_param HTTPS on;
}
}
Si estás utilizando el Internet Information Services de Windows, puedes usar como ejemplo el archivo web.config:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="index.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="Silex Front Controller" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Si estás usando lighttpd, utiliza este sencillo ejemplo de host virtual como punto de partida:
server.document-root = "/ruta/a/app"
url.rewrite-once = (
# configura algunos archivos estáticos
"^/assets/.+" => "$0",
"^/favicon\.ico$" => "$0",
"^(/[^\?]*)(\?.*)?" => "/index.php$1$2"
)
PHP 5.4 viene con un servidor web integrado para desarrollo. Este servidor te permite ejecutar Silex sin ninguna configuración. Sin embargo, con el fin de servir archivos estáticos, tendrás que asegurarte de que tu controlador frontal devuelve false en ese caso:
// web/index.php
$filename = __DIR__.preg_replace('#(\?.*)$#', '', $_SERVER['REQUEST_URI']);
if (php_sapi_name() === 'cli-server' && is_file($filename)) {
return false;
}
$app = require __DIR__.'/../src/app.php';
$app->run();
Suponiendo que el controlador frontal se encuentra en web/index.php, puedes iniciar el servidor desde la línea de ordenes con la siguiente orden:
$ php -S localhost:8080 -t web web/index.php
Ahora la aplicación debe estar funcionando en http://localhost:8080.
Nota
Este servidor es sólo para desarrollo. No se recomienda su uso en producción.