Вы можете решить эту проблему с помощью комбинации конфигурации PHP и Apache. Это наиболее распространенное решение, встречающееся в популярных программах для веб-сайтов PHP, таких как Drupal и Wordpress.
Идея состоит в том, чтобы Apache отправлял весь трафик в один файл index.php и передавал оставшуюся часть пути в качестве параметра для PHP, чтобы справиться с ним.
Вы должны быть осторожны с несколькими крайними случаями; если запрашивается такой файл, как ./public/styles.css, вы не хотите обрабатывать его через свое PHP-приложение, но хотите, чтобы apache обслуживал файл напрямую. Существующие файлы должны быть обработаны Apache, а все остальное - приложением .
В вашем .htaccess :
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Первая строка сообщает Apache, что нужно отправлять обычные файлы самостоятельно. Вторая строка делает то же самое для существующих каталогов. Третья строка позволяет избежать того, что браузеры (особенно версия IE6), которые запрашивают example.com/favicon.ico, не забивают ваше PHP-приложение.
Затем он передает все по index.php
и добавляет остаток пути в параметр q.
Внутри index.php вы можете прочитать это и принять меры:
<?php
$path = $_GET['q'];
$params = explode('/', $path);
print $path;
print_r($params);
?>