Tôi có trường hợp này khi tìm kiếm html <form>
buộc nó phải đi đến /search/index.php?q=term
và muốn sử dụng một cái gì đó như /tìm kiếm/thuật ngữ
thay thế.
Đây là cách cấu hình trông giống như ngay bây giờ:
vị trí /tìm kiếm/ {
viết lại ^/search/(.+) /search/index.php?q=$1;
}
Truy cập trực tiếp vào vị trí này hoạt động, nhưng tại thời điểm điền vào biểu mẫu và tìm kiếm nó sẽ sử dụng "nguồn gốc" thay vì viết lại.
Tôi đã thử sử dụng chuyển hướng "ngược", nhưng điều đó đã làm hỏng dịch vụ nginx:
vị trí /tìm kiếm/ {
viết lại ^/search/(.+) /search/index.php?q=$1;
chuyển hướng ^/search/index.php?q=(.+) /search/$1;
}
Tôi cũng đã thử viết lại với dài hạn
cờ, không làm gì cả
vị trí /tìm kiếm/ {
viết lại ^/search/(.+) /search/index.php?q=$1;
viết lại ^/search/index.php?q=(.+) /search/$1 vĩnh viễn;
}
Tôi biết có thể đạt được điều tương tự trong PHP với nội dung như thế này:
// Trên cùng của /search/index.php
if (str_starts_with($_SERVER['REQUEST_URI'], '/search/index.php')){
$protocol = ($_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") ? "https" : "http";
$server = $_SERVER['HTTP_HOST'];
truy vấn $ = mảng();
parse_str($_SERVER['QUERY_STRING'], $queries);
$search = $queries['q'] ?? "";
tiêu đề ("Vị trí: $protocol://$server/search/$search");
}
Nhưng hãy nghĩ rằng sẽ tốt hơn nếu nginx có thể xử lý việc này (nếu có thể).
Có ai biết cách viết lại và chuyển hướng truy cập từ nguồn gốc không?