Odpowiedz

1

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”.

+0

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 –

+0

"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

Powiązane problemy