2013-04-18 24 views
8

I Love the new apache httpd 2.4 với nhiều nội dung thú vị mới!Apache regex backreferences UNREACHABLE trong httpd 2.4?

ap_expr là một trong những tính năng rất hứa hẹn mới,

..nhưng SSI sau đoạn mã không làm việc như mong đợi:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}} 

Các nếu đang làm việc NHƯNG var isn' t đặt! Điều này không có ý nghĩa gì cả.

error.log nói:

.. AH01330: regex capture $1 is out of range 

Các doc (http://httpd.apache.org/docs/2.4/expr.html#other) là khó hiểu và không có mẫu bất cứ nơi nào gần.

Tôi biết rằng có một di sản (workaround) chuyển đổi cho SSI .. nhưng tôi không muốn sử dụng nó từ năm cũ Start- và End-tag buộcLegacy

Làm tương tự regex phân tích cú pháp -tricks w SetEnvIfExpr không đang giúp một trong hai

+2

"Họ có thể thường chỉ được sử dụng trong các biểu hiện giống như regex phù hợp, nhưng một số module cho phép sử dụng đặc biệt." Tôi tưởng tượng đó là vấn đề, và bạn phải phù hợp với nhiệm vụ vào biểu thức "tương tự", bất kể tên miền đó là gì. –

Trả lời

0

Theo documentation:

biểu hiện thường xuyên backreferences các chuỗi $ 0 ... $ 9 cho phép để tham khảo các nhóm chụp từ một biểu thức chính quy được khớp trước đây, được thực thi thành công. Chúng thường chỉ có thể được sử dụng trong cùng một biểu thức như regex phù hợp, nhưng một số mô-đun cho phép sử dụng đặc biệt.

Bạn đang sử dụng một nhóm chụp và bạn đang tham chiếu rằng việc sử dụng chỉ số 1, điều này sẽ được ok sử dụng một động cơ regex tiêu chuẩn, nhưng theo các tài liệu bạn có thể tham khảo từ $0...$9. Tôi đoán apache được lấp đầy inde 0 với nhóm chụp của bạn thay vì 1 và đó là bạn sẽ có được regex capture $1 is out of range

Thay đổi chỉ số $1 để $0 bằng cách sử dụng:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}} 
+0

Có vẻ như vậy, nhưng tôi không nghĩ các nhà phát triển Apache sẽ phát minh lại bánh xe! – hjpotter92

+0

@ hjpotter92 lol xin lỗi người đàn ông ... nghĩ rằng bạn đã làm –

1

bằng cách thay đổi

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$1"}} 
{{endif}} 

đến

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$0"}} 
    {{if expr="v('user') =~ /([^&]+)$/"}} 
     {{set var="user" value="$0"}} 
    {{endif}} 
{{endif}} 

ai có thể làm việc xung quanh vấn đề sử dụng thực tế là $ 0 dường như làm việc

+0

Cuộc sống an toàn hơn!(không thực sự, nhưng điều này đã giúp tôi rất nhiều) – Mchl

0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}} 
    {{set var="user" value="$0"}} 
{{endif}} 
+0

Đây chỉ là một khối mã gần giống với mã trong các câu trả lời khác. Để mã này hữu ích, nó cần phải có giải thích về nó là gì và tại sao nó trả lời câu hỏi. Do nó tương tự như mã trong các câu trả lời khác nên nó cũng giải thích tại sao nó khác với chúng. – AdrianHHH

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