Tôi đang cố chuyển một biến môi trường từ .htaccess sang PHP. Điều này hoạt động tốt trên máy chủ WAMP cục bộ của tôi, nhưng trên máy chủ mà trang web của tôi được lưu trữ, nó không thành công mà không có lý do.Biến môi trường không được chuyển từ .htaccess sang PHP
Dưới đây là cấu hình thử nghiệm của tôi:
.htaccess:
SetEnv TEST_VARIABLE test_value
test.php:
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
Trên máy chủ địa phương của tôi, nhận được một cách chính xác test.php trả:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
Nhưng trên production server, nó sẽ trả về:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
Những điều tôi đã loại trừ khả năng:
mod_env
không được cài đặt/kích hoạt bởi máy chủ. Không thể, bởi vì sau đóSetEnv
sẽ không được nhận dạng và tôi sẽ nhận được 500 trong khi xử lý .htaccess.AllowOverrides
tronghttpd.conf
cho thư mục này không bao gồmFileInfo
. Không thể được, bởi vì sau đó Apache sẽ ném một lỗi "SetEnv không được phép ở đây" khi gặp phải chỉ thịSetEnv
và tôi sẽ nhận được 500 một lần nữa.variables_order
trong php.ini không bao gồm 'E'. Điều này sẽ giải thích rằng siêu dữ liệu$_ENV
bị trống rỗng (có nghĩa là), nhưng không phải lý do tại saogetenv()
không trả lại giá trị cho các biến này.Toàn bộ môi trường bị hỏng. Không thể, vì
getenv('PATH')
vàgetenv('SERVER_NAME')
vẫn trả về giá trị hợp lệ.
Tại thời điểm này tôi không biết cấu hình nào có thể gây ra điều này.
SetEnv _is_ một lệnh .htaccess, nhưng bạn đã đóng đinh: khi tôi đã thêm tiền tố biến với HTTP_, mọi thứ đã hoạt động. Tôi đã không thấy yêu cầu đó được ghi lại trong bất kỳ nguồn "chính thức" nào, điều này thật kỳ lạ, nhưng này, nếu nó hoạt động không chạm vào nó, phải không? – nitwit
Yêu cầu tương tự dường như đi cho RewriteRule. * - (E = HTTP_VAR: VAL) trên một số máy chủ. – Chris
chỉ chạy vào cùng một vấn đề này, thật kỳ lạ là nó không được ghi chép ở bất cứ đâu. Trong trường hợp của tôi, điều này đã không xảy ra với một kịch bản PHP, mà đúng hơn là trong Perl. – insaner