2012-08-06 16 views
10

Iam साइट पर मेरे होम पेज या किसी अन्य पृष्ठ को किसी विशेष PHP पृष्ठ पर रीडायरेक्ट करने का प्रयास कर रहा है। यह अपने htaccess.htaccess को पढ़ा नहीं जा रहा

Redirect 301 http://test.com/info http://test.com/get_forms_data.php 
Options +FollowSymlinks 
RewriteEngine ON 
RewriteRule ^test.php$ http://test.com/get_forms_data.php [R=301,L] 

मैं जाँच की है मेरे अपाचे सर्वर .rewrite सक्षम है।

यह अभी भी काम नहीं करता है।

+0

क्या फ़ाइल में सही अनुमतियां हैं? – Viehzeug

+2

क्या आपको जानबूझकर फ़ाइल में गलती पेश करते समय कोई त्रुटि मिलती है? (यह देखने के लिए कि क्या इसे बिल्कुल पार्स किया गया है) –

+0

@ विहज़ेग - हाँ मैंने सही अनुमतियां दी हैं। – user1411837

उत्तर

25

कोई बात नहीं क्या आप अपने .htaccess फ़ाइल में डाल दिया है, तो आप भी एक त्रुटि प्राप्त नहीं है, तो यह है कि आप शायद अपनी साइट विन्यास में

AllowOverride All

सेट की आवश्यकता है का मतलब है।

यदि आप उबंटू पर हैं, तो कॉन्फ़िगरेशन देखने के लिए स्थान /etc/apache2/sites-available/ है। वहां आपको default नामक एक फ़ाइल मिलनी चाहिए यदि यह डिफ़ॉल्ट LAMP स्टैक (https://help.ubuntu.com/community/ApacheMySQLPHP) का स्टॉक इंस्टॉल है।

महत्वपूर्ण हिस्सा वहाँ यह है:

<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 

अब AllowOverride All करने के लिए AllowOverride None बदल जाते हैं। उसके बाद भूल जाते हैं नहीं तो की तरह अपने अपाचे पुनः आरंभ करने की:

$ service apache2 restart 
+0

मेरे लिए एक अलग समस्या है – lbennet

8

मॉर्गन जवाब देने के लिए एक अतिरिक्त के रूप में, अपने वर्चुअल होस्ट में AllowOverride All रहा है कभी कभी पर्याप्त नहीं। मैं अपने वर्चुअल होस्ट में यह था:

<VirtualHost *:80> 
    ... 
    <Directory /> 
    ... 
    AllowOverride All 
    ... 
    </Directory> 
</VirtualHost> 

आप इस काम करने के लिए उम्मीद करेंगे, नहीं होगा, <Directory /> मतलब है कि यह फाइल सिस्टम पर हर जगह के लिए लागू किया जाना चाहिए। लेकिन .htaccess अभी भी अनदेखा किया जा रहा था। सर्वर को पुनरारंभ करने में मदद नहीं मिली। मैंने यह पुष्टि करने के लिए .htaccess फ़ाइल में जंक डाल दिया है कि इसे पढ़ा नहीं जा रहा था।

मेरी गलती यह मान रही थी कि वर्चुअल होस्ट वैश्विक कॉन्फ़िगरेशन को ओवरराइड करता है। इसका प्रकार है: मेरा उपरोक्त कॉन्फ़िगरेशन / निर्देशिका के लिए किसी भी वैश्विक सेटिंग्स को ओवरराइड करता है। लेकिन वैश्विक विन्यास इसे /var/www/ और नीचे के लिए ओवरराइड करता है। मेरे ठीक है:

<VirtualHost *:80> 
    ... 
    <Directory /var/www> 
    ... 
    AllowOverride All 
    ... 
    </Directory> 
</VirtualHost> 

(इस /var/www बाहर लागू करने के लिए आवश्यक अन्य विन्यास में से कोई भी मान लिया गया है, अगर यह होता है, केवल उस विशेष विन्यास के लिए एक अलग <Directory /> ब्लॉक कर सकते हैं।)

1

मैं के साथ संघर्ष कर रहा था एक ही समस्या, और डैरेन कुक के जवाब ने मुझे समाधान खोजने के लिए निश्चित संकेत दिया।

मेरा ऐप सार्वजनिक www पथ से कुछ फ़ोल्डर में था, लेफ्टिनेंट /opt/my_app में कहता है। मैं एक VirtualHost नहीं बना सका, इसलिए मैं अपने फ़ोल्डर में अपाचे के सार्वजनिक www पोंटिंग में एक सिमलिंक बनाया:

/var/www/html/my_app -> /opt/my_app

बात है, मेरे ऐप की अपाचे कॉन्फ़िग फ़ाइल में, मैं निर्दिष्ट करने गया था:

<Directory /opt/my_app> 
    AllowOverride All 
</Directory> 

और मेरी .htaccess फ़ाइल नहीं पढ़ी जा रही थी। फिर मैंने देखा कि अपाचे के विन्यास में इस किया गया है कि:

<Directory /var/www/html> 
    AllowOverride None 
</Directory> 

तब मुझे एहसास हुआ कि अपाचे config फ़ाइलों सिमलिंक के बारे में परवाह नहीं है, और इसलिए सामान्य नियम मेरे ऐप की foler के लिए लागू किया जा रहा है। मैंने Directory को बदल दिया:

<Directory /var/www/html/my_app> 
    AllowOverride All 
</Directory> 

और सब कुछ काम किया।

+0

आपने मेरा दिन बनाया! बहुत बहुत धन्यवाद – netzaffin

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