Хороший вопрос, мы работаем через PHP.
Мы используем собственную платформу, которую мы создали.У нас есть таблица, которая содержит все действительные URL-адреса, или «Маршруты» (очень похоже на воспламенитель кода или kohana).Мы делаем две вещи.
Настройте htaccess так, чтобы, если файл существует на физическом сервере, то показывал этот файл.поэтому htaccess выглядит примерно так:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?r=$1 [L,QSA]
пояснение - переписать любой URL, например www.domain.com/myurl, чтобы перейти к index.php? r = myurl, кромекогда URL-адрес представляет собой файл (! -f) или каталог (! -d), который существует на сервере.
Тогда у нас есть файл начальной загрузки, index.php делает что-то вроде этого:
$route = $_GET['r'];
db::where('route', $route);
$result = db::get('routes')->fetch();
if(!$result) show_error('404');
и затем мы определили show_error ('404') как
function show_error($type){
switch($type){
case '404':
default:
header("HTTP/1.0 404 Not Found");
include('404.html');
exit;
break;
}
}
Используя эту технику, большинство других ошибок, таких как 403 без доступа и т. Д., Все еще будут обслуживаться из Apache.Потому что, если, например, существует защищенный паролем каталог, то перезапись заставит сервер отобразить этот каталог, который затем запросит пароль, а если действительный пароль не указан, он будет обслуживать 403.
Удачи!