Zamiast ErrorDocument w konfiguracji .htaccess, można wymusić prawdziwą przekierowanie do error.php tak:
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /error.php?pg-name=%{REQUEST_FILENAME} [L]
Źródło: How to get `$_POST` query when 404 redirected through .htaccess?
Na stronie error.php można następnie sprawdzić, czy parametr pg-nazwa jest podana na error.php:
echo '<pre>';
print_r($_GET);
echo '</pre>';
Jeśli zadzwonić stronę tak: http://domain1.com/asdasdasd (zakładając, że link nie jest znaleziono), wyjście z error.php będzie wyglądać następująco:
Array
(
[pg-name] => /path_to/public_html/asdasdasd
)
Następnie można przejść do żądanej smyczkowy „asdasdasd”.
ja pomocą tego RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule^(. +) $ /404.php?pg-name=$1 [l, r] ale Problem polega na tym, że nie ustawia nagłówka na 404 raczej ustawiając nagłówek na 302 –
"wymuszając prawdziwe przekierowanie" - Zauważ, że jest to _wewnętrzne przepisywanie_, a nie "zewnętrzne" przekierowanie "_. To dobrze, nie chcesz "przekierować" ('R' flag na' RewriteRule') żądania, w przeciwnym razie użytkownik otrzyma status 3xx. Jednak będziesz musiał ręcznie ustawić odpowiedni 404 kod statusu HTTP w 'error.php'. – MrWhite