2015-02-27 5 views
9

मेरे पास एंगुलरजेएस वेबपैप और जर्सी बैकएंड है। मुझे यूआरएल रीराइटिंग सेट अप करने की ज़रूरत है, इसलिए दिए गए अपवादों को छोड़कर सबकुछ एंगुलर के index.html को फिर से लिखा जाएगा।टोमकैट 8 यूआरएल रिवाइट

उदा .:

http://my.domain.com/about will be rewritten 
http://my.domain.com/photos/photo1.jpg will NOT be rewritten (file photo 1 exists) 
http://my.domain.com/rest/myservice will be NOT be rewritten (it is a call to REST service) 

मैं इस प्रकार बिलाव 8 URL पुनर्लेखन वाल्व की स्थापना की है:

conf/server.xml conf में

<Host name="my.domain.com" appBase="webapps/MyDomainServer" unpackWARs="true" 
      autoDeploy="true" 
      xmlValidation="false" xmlNamespaceAware="false"> 
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> 
    <!-- access logging, aliases,...--> 
</Host> 

/में

कैटालिना/my.domain.com/rewrite.config

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} ^/rest.* 
RewriteRule^- [L] 

RewriteRule^index.html [L] 

टॉमकैट मेरी पुनर्लेख सेटिंग्स को अनदेखा करता है, कुछ भी नहीं लिखा जाता है, लॉग में कोई त्रुटि/अपवाद नहीं है। मैं क्या गलत कर रहा हूं? अग्रिम में धन्यवाद।

मैंने रीटाइटवेल को मेटा-आईएनएफ में config.xml में स्थानांतरित करने और वेब-आईएनएफ में कॉन्फ़िगरेशन को फिर से लिखने का प्रयास किया है, लेकिन यह वैसे ही व्यवहार करता है।

उत्तर

7

मैं समाधान पाया है, समस्या गलत/दोषपूर्ण rewrite.config फ़ाइल में था। सही होना चाहिए:

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$ 
RewriteRule ^.*$ - [L] 

RewriteRule ^.*$ /index.html [L,QSA] 

पहली पंक्ति पर यूआरआई जो फिर से लिखा नहीं किया जाना चाहिए enumerated हैं। बाकी सब कुछ index.html को फिर से लिखा जाएगा।

+1

लेकिन यह दोषपूर्ण क्यों था? मेरे साथ भी वही दिक्कत है। % {REQUEST_FILENAME} हमेशा शून्य है ... –

+1

... और SCRIPT_FILENAME सही है, लेकिन रीवाइटकंड% {SCRIPT_FILENAME} -f संसाधन में लापता अग्रणी/शिकायत के बारे में शिकायत करता है। यह एक विंडोज सिस्टम है। तो पथ सी है: \ ... बिना अग्रणी/ –

+0

हमारे मामले में, हमने (REQUEST_FILENAME} के बजाय {REQUEST_URI} का उपयोग किया। हम नियमों को पूरी तरह से नहीं छोड़ सके क्योंकि हम आवेदन के लिए स्थानीय संपत्तियों को लोड करने में असमर्थ थे, लेकिन REQUEST_URI का उपयोग करने के लिए! -f और! -d को बदलना, कम से कम अभी तक काम कर रहा है। –

3

क्या यह जावा वेब ऐप (WAR) के रूप में तैनात है? आप अपने web.xml में यह लागू हो सकते हैं:

<servlet> 
    <servlet-name>index</servlet-name> 
    <jsp-file>/index.html</jsp-file> 
</servlet> 

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern>/</url-pattern> 
    <url-pattern>/about</url-pattern> 
    .. as many as you need .. 
<servlet-mapping> 
+0

धन्यवाद निकोलस, यह एक दिलचस्प विकल्प प्रतीत होता है, लेकिन मैंने पुनः लिखने का उपयोग करके इसे हल करने में कामयाब रहा है। मुझे दोषपूर्ण rewrite.config फ़ाइल थी। – kamelot

0

मैं इसे REQUEST_URI के साथ काम करने के लिए नहीं मिला, और मुझे किसी भी तरह से विशिष्ट फ़ाइलों को श्वेतसूची में रखना पसंद नहीं आया, इसलिए मैंने इसे slightly different manner में हल किया।

संबंधित मुद्दे