2010-04-26 21 views
5

Tôi đang sử dụng Apache và tôi muốn chuyển hướng tất cả yêu cầu đã nhận tới máy chủ ảo ssl.Regex - cách kết hợp mọi thứ trừ một mẫu cụ thể

Vì vậy, tôi có dòng sau trong http host ảo thường xuyên:

RedirectMatch https://www.mydomain.com $ 1

mà về cơ bản thay thế $ 1 bởi tất cả mọi thứ (. *).

Nó hoạt động hoàn hảo. Nhưng bây giờ, tôi cần truy cập một CGI cụ thể mà không thể có trên máy chủ ảo SSL. Vì vậy, tôi muốn chuyển hướng tất cả yêu cầu, trừ trường hợp sau đây:

"http://www.mydomain.com/mycgi/cgi.php"

Tôi có tìm kiếm trên diễn đàn này và tìm thấy một số bài liên quan đến loại trừ regex, nhưng không ai đang làm việc. Mọi sự trợ giúp sẽ rất được trân trọng.

Cảm ơn. Alain

Trả lời

2

Apache 2.2 trở lên có hỗ trợ lookahead tiêu cực trong cụm từ thông dụng. Nếu bạn đang sử dụng Apache 2.2 hoặc mới hơn này nên làm việc:

RedirectMatch ^/(?!mycgi/cgi.php)(.*) https://www.mydomain.com/$1 
+0

Cảm ơn bạn rất nhiều. Nó hoạt động hoàn hảo. Bạn đã giải quyết ít hơn 30 phút những gì tôi đã làm việc trong gần 8 giờ ngay bây giờ! – Alain

+0

Có hoạt động tốt nếu url là: mycgitest/cgi.php? – Felix

1

Tôi tin rằng RedirectMatch là short-circuit sorta deal. Điều này có nghĩa là, nếu bạn đặt một RedirectMatch khác trước trận đấu của bạn, chỉ có trận đấu đầu tiên sẽ được thực hiện. vì vậy, chẳng hạn như ...

RedirectMatch (/mycgi/cgi.php) http://www.mydomain.com$1 
RedirectMatch (.*) https://www.mydomain.com$1 
+0

+1 Bạn đánh tôi bằng một vài giây. Quy tắc đầu tiên của bạn nên chuyển hướng đến 'http' và bạn có thể muốn thêm '/' hàng đầu vào quy tắc đó. –

+0

Liệu quy tắc đầu tiên đó có dẫn đến vòng lặp chuyển hướng không? –

+0

Chà ... thật nhanh! Nhưng thật không may bằng cách đặt dòng này vào máy chủ ảo "bình thường không SSL" của tôi, nó không hoạt động. Firefox cho tôi biết lỗi đó: Firefox đã phát hiện ra rằng máy chủ đang chuyển hướng yêu cầu cho địa chỉ này theo cách mà sẽ không bao giờ hoàn thành. Và tôi nghĩ điều này là bình thường vì chúng tôi yêu cầu Apache thực hiện chuyển hướng. Vì vậy, Apache nhận được yêu cầu, phù hợp với nó so với regex đầu tiên sau đó chuyển hướng đến chính mình, trận đấu một lần nữa, và như vậy. Ý tưởng của bạn về điều đó? Tôi đã cố gắng đặt dòng trong máy chủ ảo SSL của mình nhưng nó bị bỏ qua. Alain – Alain

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