5

Có bất kỳ truy vấn nào để nắm bắt chuỗi truy vấn và nối chuỗi truy vấn đó vào tài liệu lỗi (404) hay không. Một cái gì đó như:cách thêm chuỗi truy vấn vào tài liệu lỗi

trang được yêu cầu:

http://www.example.com/sdsdsd 

Redirect to:

http://www.example.com/404.php?pg-name=sdsdsd 

Trả lời

1

Thay vì sử dụng ErrorDocument trong cấu hình htaccess, bạn có thể buộc một chuyển hướng thực sự cho error.php như thế này:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /error.php?pg-name=%{REQUEST_FILENAME} [L] 

Nguồn: How to get `$_POST` query when 404 redirected through .htaccess?

Trong trang error.php sau đó bạn có thể kiểm tra, nếu tham số pg-tên được trao cho các error.php:

echo '<pre>'; 
print_r($_GET); 
echo '</pre>'; 

Nếu bạn gọi cho bạn trang như thế này: http://domain1.com/asdasdasd (giả định liên kết không phải là tìm thấy), đầu ra từ error.php sẽ trông giống như sau:

Array 
( 
    [pg-name] => /path_to/public_html/asdasdasd 
) 

Sau đó, bạn có thể truy cập chuỗi được yêu cầu "asdasdasd".

+0

Tôi đang sử dụng này RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule^(. +) $ /404.php?pg-name=$1 [L, R] nhưng vấn đề là nó không đặt tiêu đề thành 404 thay vì đặt tiêu đề thành 302 –

+0

"buộc chuyển hướng thực" - Lưu ý rằng đây là một _internal rewrite_, không phải là _external "redirect" _. Điều này là tốt, bạn không muốn "chuyển hướng" (cờ 'R' trên' RewriteRule') yêu cầu, nếu không người dùng sẽ được gửi trạng thái 3xx. Tuy nhiên, bạn sẽ cần phải đặt mã trạng thái HTTP 404 thích hợp theo cách thủ công trong 'error.php'. – MrWhite

Các vấn đề liên quan