2010-08-02 20 views
7

पर डायरेक्ट करें मैं SSL पर रीडायरेक्ट करने के लिए UrlRewriteFilter का उपयोग कर रहा हूं। मैं ग्लासफिशव 2 चला रहा हूँ।urlRewriteFilter https

मेरा नियम अब ऐसा कुछ दिखता है। यह मेरे warlrewrite.xml में है मेरे युद्ध फ़ोल्डर के वेब-आईएनएफ में। क्या कोई अन्य ग्लासफ़िश सेटिंग सेट की जानी चाहिए?

<rule> 
     <condition name="host" operator="notequal">https://abc.def.com</condition> 
    <condition name="host" operator="notequal">^$</condition> 
    <from>^/(.*)</from> 
    <to type="permanent-redirect" last="true">https://abc.def.com/ghi/$1</to> 
    </rule> 

लेकिन एफएफ यह कहता रहता है कि यूआरएल रीडायरेक्ट नियम इस तरह से है कि यह कभी पूरा नहीं होगा। मुझे बिल्कुल यकीन नहीं है कि यहां क्या हो रहा है। कोई विचार?

उत्तर

11

मुझे संदेह है कि समस्या यह है कि host हेडर (जिसका आप तुलना कर रहे हैं) का मूल्य संसाधन तक पहुंचने के लिए उपयोग की जाने वाली योजना नहीं है, जहां आपका तुलना मूल्य करता है। इसका मतलब यह है कि स्थिति हमेशा सत्य होती है, क्योंकि होस्ट कभी भी इसकी तुलना नहीं करता है कि आप इसकी तुलना कर रहे हैं, जिससे एक अनंत रीडायरेक्ट लूप होता है।

UrlRewriteFilter के लिए दस्तावेज़ को देखते हुए, आप आप क्या चाहते हैं पाने के लिए इस तरह कुछ करने के लिए सक्षम होना चाहिए:

<rule> 
    <condition type="scheme" operator="notequal">https</condition> 
    <condition name="host" operator="equal">abc.def.com</condition> 
    <from>^/(.*)</from> 
    <to type="permanent-redirect" last="true">https://abc.def.com/ghi/$1</to> 
</rule> 
+0

धन्यवाद बहुत धन्यवाद, टिम और विनीट के रूप में उपलब्ध है। नियम से लापता योजना समस्या थी और अब यह सही तरीके से रीडायरेक्ट करता है। – adi

+0

पहली शर्त में टाइप करने के लिए योजना का उपयोग करके मेरे लिए काम नहीं किया। मैंने इसका इस्तेमाल किया जिसके बजाय काम किया: ^HTTPS $ ninjasense

0

होस्ट नाम यूआरएल में निर्दिष्ट नियम पुनर्लेखन योजना शामिल नहीं कर सकते का मूल्य। UrlRewriteFilter request.getServerName() के माध्यम से होस्टनाम निर्धारित करने के लिए आंतरिक रूप से Servlet API विधियों का उपयोग करता है; यह विधि कॉल कभी भी इस योजना को वापस नहीं लौटाता है, इसलिए आप स्कीम सत्यापन को अलग से करने के बेहतर हैं (जैसा कि टिम ने निहित किया है)।

यदि आप अन्य विधियों को देखते हैं, तो योजना सत्यापन अलग से किया जाना चाहिए, क्योंकि यह योजना केवल एपीआई मेंविधि के माध्यम से उपलब्ध कराई गई है, जिसे UrlRewiteFilter के माध्यम से अलग से उजागर किया गया है।

एफएफ की रीडायरेक्शन में त्रुटि की रिपोर्ट करने का वास्तविक कारण शायद मूल अनुरोध (और ग्राहक द्वारा किए गए अनुरोधों के लिए) के लिए ग्राहक को वापस भेजे जाने वाले एकाधिक 302 के कारण है। एचटीटीपीएस पुनर्निर्देशन विफल होने पर आपके नियम में व्यवहार के वास्तविक कारण पर यह निर्धारित करने के लिए हो सकता है कि कोई नियम मौजूद है या नहीं।

संपादित करें:

संभव हैं, तो आप web.xml में गोपनीय transport guarantee तत्व के उपयोग की जांच सुनिश्चित करने के लिए कि सर्वलेट कंटेनर बलों सभी HTTP अनुरोध SSL पर किए जाने के लिए कर सकते हैं।

0

मैं बिल्कुल यकीन है कि क्या ऊपर अपने उदाहरण के साथ कुछ गलत है नहीं कर रहा हूँ, लेकिन यह उन सुंदर समस्याओं में से एक है कि आसानी से, एक और खुला स्रोत URLRewriteFilter OCPsoft पुनर्लेखन का उपयोग कर हल किया जा सकता है:

@Override 
public Configuration getConfiguration(final ServletContext context) 
{ 

    return ConfigurationBuilder.begin() 
    .defineRule() 

    .when(Direction.isInbound() 
     .and(Domain.matches("abc.def.com")) 
     .and(Path.matches("/{path}").where("path").matches(".*")) 
     .andNot(Scheme.matches("https")) 
    .perform(Redirect.to("https://abc.def.com/{path}")); 

} 

Scheme ऑब्जेक्ट रीवाइट संस्करण 1.0.1: http://ocpsoft.org/rewrite/