2013-03-13 8 views
6

के लिए लागू नहीं किए जा रहे नियमों को मैं निम्नलिखित बंद प्रश्न के रूप में लगभग सटीक संरचना के साथ एंगुलरजेएस के साथ अपाचे 2.2 सेट अप करने का प्रयास कर रहा हूं।Apache rewrite नियम angularjs

rewrite rules for apache 2 to use with angular js

मैं/api के लिए अनुरोधों के अतिरिक्त/index.html ऐप्लिकेशन के सभी अनुरोधों पुनर्निर्देशित करने के लिए करना चाहते हैं।

मेरे निर्देशिका संरचना का पालन

  • /
  • /एप्लिकेशन
  • /app/index.html
  • /ऐप्स/सीएसएस
  • /ऐप्स/js
  • /एपीआई के रूप में है

मैं कोशिश कर रहा हूं इन रीडायरेक्ट नियमों को httpd-vhosts फ़ाइल में लागू करें जैसे कि प्रश्न के लिए सही उत्तर https://stackoverflow.com/a/15284848/671095 के रूप में पोस्ट किया गया था।

<VirtualHost *:80> 
ServerName www.test.com 
DocumentRoot "C:/websites/test" 
Alias /CFIDE "C:/websites/CFIDE" 

RewriteEngine On 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !/api 

# otherwise forward it to index.html 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^app/. /app/index.html [NC,L] 

</VirtualHost> 

हालांकि जब मैं ब्राउज़र में/विज़िट करने का प्रयास करता हूं तो मुझे एक खाली स्क्रीन के साथ प्रस्तुत किया जाता है। यदि मैं ब्राउज़र में /app/index.html में प्रवेश करता हूं, लेकिन मैं अपने ब्राउज़र में एचटीएमएल पेज देख सकता हूं लेकिन css.or js में से कोई भी एक्सेस नहीं किया जा सकता है और 404 लौटा रहा है।

मैं जा रहा हूं इस पर नट्स जो एक अपाचे रीराइट के रूप में पूरा करने के लिए एक साधारण चीज़ की तरह लगता है।

किसी भी मदद की बहुत सराहना की जाएगी

उत्तर

2

मैं इस एक ही मुद्दा था। लेकिन मैं mod_rewrite में अज्ञानी हूं इसलिए Google को बहुत कुछ करना पड़ा।

https://groups.google.com/d/msg/angular/GmNiNVyvonk/mmffPbIcnRoJ

तो मुझे लगता है अपनी .htaccess इस प्रकार दिखना चाहिए::

Options +FollowSymLinks 
IndexIgnore */* 

RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !/api 
RewriteRule ^.*$ - [NC,L] 

# otherwise forward it to index.html 
RewriteRule ^app/(.*) /app/#/$1 [NC,L] 

सूचना (.*) और #/$1

नोट: You must मैं इस ईमेल में समाधान नहीं मिला अपने सीएसएस, जेएस इत्यादि में पूर्ण पथ का उपयोग करें यदि आपको त्रुटि नहीं मिल रही है:

resource interpreted as script but transferred with mime type text/html

+0

मैंने इन नियमों को httpd-vhosts फ़ाइल पर लागू किया है, लेकिन जब मैं 'mywebsite.com 'तक पहुंचने का प्रयास करता हूं तो यह index.html फ़ाइल से भी गुज़रता नहीं है जब मैं' mywebsite.com/app/'तक पहुंचता हूं ब्राउज़र में 404 के साथ प्रस्तुत किया गया – matthew

+0

मैंने आपके कोड का उपयोग किया और मुझे "आंतरिक सर्वर त्रुटि" संदेश दिखाई देता है। कोई राय कि इसे कैसे ठीक किया जाए? – Devner

13

यह अब FallacheResource निर्देश का उपयोग करते हुए अपाचे 2.2.16+ में बहुत आसान है।

FallbackResource /app/index.html 

http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

पर कैसे आप अपने API तक पहुंच को अग्रेषित कर आप विशेष रूप API अनुरोधों (2.2.24+) पर पर वापस आने संसाधन निष्क्रिय करने के लिए भी बाड़े लाभ उठाने के लिए आवश्यकता हो सकती है निर्भर करता है।मेरे लिए

<Directory /api> 
    FallbackResource disabled 
</Directory> 
+0

apache 2.4.x के साथ एक आकर्षण की तरह काम करता है! –

11

This काम करता है:

<ifModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !index 
    RewriteRule (.*) index.html [L] 
</ifModule> 
+0

बस इस टिप्पणी को जोड़ने के लिए, यदि आपका कोणीय ऐप मेजबान की जड़ पर स्थित नहीं है, यानी सामग्री http://example.com/moo/ जैसी निर्देशिका में रहती है, तो आपको उपयुक्त '' टैग जोड़ने की आवश्यकता है । http://example.com/moo/ के उदाहरण के लिए, आपके टैग को ' 'होना चाहिए - ऐसा इसलिए है कि आपकी संपत्तियां और टेम्पलेट सही ढंग से लोड हो जाएं – BahamutWC

+0

@BahamutWC: का उपयोग आधार टैग निराश है; http://docs.angularjs.org/guide/dev_guide.services.$location – Daan

+1

@Daan यह केवल तब तक निराश होता है जब तक एंगुलर अनुशंसा करता है कि आप इसे रूट दस्तावेज़ से सेवा दें। हालांकि यदि आप किसी भी कारण से नहीं कर सकते हैं, तो आपको ' 'टैग का उपयोग करना होगा। – BahamutWC

1

आप अभी भी इस समस्या हो रही है, तो पता नहीं है, लेकिन मैं और AngularJS के साथ एक ही लक्षण हो रही थी अपाचे 2.

मेरे समस्या वास्तव में मैं आईई का उपयोग कर रहा था और यह स्वचालित रूप से संगतता मोड में आ रहा था। मैंने अपने एचटीएमएल में नीचे दी गई रेखा का इस्तेमाल किया और यह काम किया।

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

यहाँ आगे वर्णित: < What does <meta http-equiv="X-UA-Compatible" content="IE=edge"> do?>।