2010-08-18 25 views
6

Điều này đã khiến tôi phát điên. Tôi không thể có vẻ để có được chỉ thị RewriteMap để làm việc cho một kịch bản php trên cửa sổ. Dưới đây là đoạn mã có liên quan từ file httpd.conf của tôi:Apache mod_rewrite: Chỉ thị RewriteMap sử dụng tập lệnh PHP trên máy Windows

<IfModule mod_rewrite.c> 
     RewriteEngine on 
     RewriteMap router "prg:C:/dev/web/www/routing.php" 
     RewriteRule (.*) ${router:$1} 
</IfModule> 

script php đơn giản của tôi đọc như thế này:

#!C:\Program Files\PHP5.3.2\php-win.exe 
<?php 

set_time_limit(0); # forever program! 
$keyboard = fopen("php://stdin","r"); 
while (1) { 
     $line = trim(fgets($keyboard)); 
     echo "/sandbox.php?url=$line"; 
     echo "\n"; 
} 
?> 

Khi tôi cố gắng để bắt đầu Apache tôi nhận được dòng sau trong nhật ký lỗi của tôi:

[lỗi] (OS 193)% 1 không hợp lệ ứng dụng Win32. : Mod_rewrite: không thể bắt đầu chương trình RewriteMap C: /dev/web/www/routing.php Cấu hình Không

The apache documentation đề cập đến 'Cookie lừa kỳ diệu' (dưới tiêu đề 'Viết lại chương trình bên ngoài') đó phải là dòng đầu tiên của tập lệnh nên trỏ tới trình thông dịch. Đây có phải là nơi tôi đang đi sai hoặc tôi có cần phải gọi cho chỉ thị RewriteMap khác nhau không?

Trả lời

6

Tôi nghi ngờ lừa ma thuật sẽ hoạt động trên Windows. Đây là một tính năng UNIX/Linux.

Bạn sẽ phải xác định các thông dịch viên PHP và kịch bản như là đối số của nó (xem thêm http://www.webmasterworld.com/forum92/859.htm):

RewriteMap router "prg:C:/Program Files/PHP5.3.2/php-win.exe C:/dev/web/www/routing.php" 

Nếu điều đó không làm việc, nó có thể là vì không gian trong Program Files. Windows hỗ trợ tên viết tắt trong các trường hợp như vậy. Ví dụ: PROGRA~1 là tên viết tắt điển hình, nhưng chữ số trong tên được chỉ định trên cơ sở ai đến trước được phục vụ trước, vì vậy bạn nên kiểm tra kỹ với lệnh DIR.

Hoặc bạn có thể di chuyển tệp thực thi php-win.exe của mình vào thư mục không chứa dấu cách.

Nếu chưa hoàn toàn rõ ràng, tôi sẽ nói điều này: Windows sucks.

+0

(+1) Nhận xét trong 'apr_proc_create' (được sử dụng để gọi chương trình) cũng lưu ý: * progname phải được bỏ chọn, ở định dạng gốc, vì có tất cả các loại lỗi trong mã bộ tải thư viện NT lỗi khi phân tích cú pháp '/' *, mặc dù tôi không chắc nó thực sự là bao nhiêu. Có vẻ như lệnh này được tự động trích dẫn sau (nếu cần), vì vậy hy vọng các khoảng trống không phải là vấn đề. –

+0

@Tim: Cảm ơn! Dù sao, không gian là một cái gì đó để được chú ý bởi vì họ có thể cắn bạn trong hoàn cảnh khác nhau. –

0

Tôi gặp sự cố tương tự. Chạy httpd.exe từ CMD, Apache sẽ hiển thị lỗi.

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