सिम्फ़लिंक का पालन करने के लिए मुझे अपाचे कैसे मिलेगा?


98

मेरे अपाचे www फ़ोल्डर में ( /var/wwwubuntu 10.10 पर) मेरे पास है:

mydir -> /home/user/mydir

(जो मैंने बनाया ln -s)

अब, अगर मुझे mydirवेब से फ़ाइलों की एक सूची देखनी है, तो मुझे अपाचे को निर्देश देना FollowSymLinksहोगा, है ना?

लेकिन मैं इसे कहां रखूं? एक .htaccessफाइल में? कहाँ पे? मैंने कई तरीके आजमाए लेकिन मुझे समझ नहीं आया ...

यह मेरी /etc/apache2/sites-enabled/000-defaultफाइल है:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

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

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

मैं भी कॉन्फ़िग फ़ाइल में एक उपनाम के साथ करने की कोशिश की .. अभी भी काम नहीं करता है ..
लुका

जवाबों:


65

यहाँ दो चीजें हैं:

  1. सिमलिंक
  2. निर्देशिका लिस्टिंग

सिमलिंक

मान लें /var/wwwकि आपका डिफ़ॉल्ट वर्चुअल होस्ट के लिए आपका डॉक्यूमेंटरूट है, आपको अपनी डिफ़ॉल्ट वर्चुअल होस्ट कॉन्फ़िगरेशन फ़ाइल (शायद /etc/apache2/sites-enabled/000-default) मिलनी चाहिए और इसे उस वर्चुअल होस्ट ब्लॉक के अंदर रखना चाहिए, जैसे

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

यदि आपने कुछ भी नहीं बदला है, तो वह विकल्प पहले से ही होना चाहिए।

निर्देशिका लिस्टिंग

अपाचे की फाइलों को एक निर्देशिका में सूचीबद्ध करने के लिए, आपको Indexesविकल्प को भी सक्षम करने की आवश्यकता है, जैसे परिवर्तन

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

इसमें /etc/apache2/sites-enabled/000-default:

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

या, शायद इसे बदलने के लिए एक अधिक सुरक्षित तरीका है:

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

और इस में डाल दिया /home/user/mydir/.htaccess

    Option Indexes

क्यों .htaccess काम नहीं करता है

डिफ़ॉल्ट रूप से, फ़ाइल Options <something>में डालने .htaccessसे आपकी कॉन्फ़िग फ़ाइल में अन्य प्रविष्टि के कारण काम नहीं होगा AllowOverride None:।

इसलिए हमें AllowOverride Indexesवहां लगाना होगा।

( AllowOverride प्रलेखन )


ऊपर मेरी कॉन्फ़िगर फ़ाइल को देखें ... यह अभी तक काम नहीं करता है ...
लूका

क्या यह अनुमतियों की समस्या हो सकती है? मैं उपयोगकर्ता जड़ कर रहा हूँ, मुझे पता है यह रूट के रूप में एक प्रणाली का उपयोग करने के लिए एक अच्छी बात है, वैसे भी नहीं है .. मैं जड़ और निर्देशिका मैं सिमलिंक के लिए रूट घर / जड़ में है / mydir .. हूँ
लुका

1
हाँ। आप क्या त्रुटि संदेश देखते हैं? आपको sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirइसे काम करने के लिए करने की आवश्यकता होगी , और यह शायद एक अच्छा विचार नहीं है। /var/wwwयदि आप कर सकते हैं के तहत फ़ाइलों को स्थानांतरित करने के लिए बेहतर है ।
मिकेल

जब भी आपको कोई त्रुटि मिलती है और आप मदद मांग रहे हैं, तो आपको हमें सटीक त्रुटि संदेश प्रदान करना चाहिए। और इसमें सुराग मिलेंगे /var/log/apache2/error.log
मिकेल

7
सुनिश्चित करें कि जब आप इसे एन्क्रिप्ट किया है, यानी /var/www→ में एक प्रतीकात्मक लिंक है, तो आप अपने घर निर्देशिका को इंगित नहीं कर रहे हैं /home/user/directory। यह एक बहुत बड़ा सिरदर्द पैदा करेगा।

11

विकल्प का उपयोग इस तरह किया जाना चाहिए:

Options +FollowSymLinks

आमतौर पर यह अपाचे विन्यास (में रखा है httpd.confया conf.d/या sites-enabled/) एक के अंदर <Directory>

देखें Options, AllowOverrideऔर <Directory>अपाचे प्रलेखन में।


1
FollowSymLinks के मामले में विशेष रूप से यह एक .conf फ़ाइल के भीतर एक निर्देशिका संरचना के अंदर होना चाहिए। अपाचे वर्तमान मैनुअल से "फॉलोसमाइनलिंक्स और सिम्लिंक्सऑफनरनरैच विकल्प केवल <डायरेक्टरी> सेक्शन या ओटेसटेस फाइलों में काम करते हैं।"
क्लियरकेन्डो

1
चेतावनी: उन लोगों के साथ + या - के साथ मिक्सिंग विकल्प वैध सिंटैक्स नहीं है और अप्रत्याशित परिणाम होने की संभावना है।
kurdtpage

10

Apache 2.4.7 के साथ Ubuntu 14.04 पर मूल (ताज़ा) कॉन्फ़िगरेशन के साथ, * .conf में कुछ भी बदलने की आवश्यकता नहीं है।

लेकिन यह आवश्यक है कि उपयोगकर्ता www-data की पहुंच सिम्लिंक टारगेट के सभी रास्तों तक हो (यहां तक ​​कि वर्चुअलहॉस्ट के लिए न केवल सिमलिंक के लिए)। उदाहरण के लिए,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

इस उदाहरण में उपयोगकर्ता www-data (या यदि आप चाहते हैं, लेकिन सभी खतरनाक हो सकते हैं) को निर्देशिका में सभी तरह से अधिकारों को निष्पादित करने की आवश्यकता है । प्रत्येक / पथ, / पथ /, और / पथ / से / दर्पण में x अधिकार की आवश्यकता है। इसके अलावा लक्ष्य निर्देशिका पर पढ़ने की अनुमति चाहिए , और, निर्देशिका के लक्ष्य के आधार पर, शायद उपयोगकर्ता www-data को लिखने की अनुमति भी चाहिए।

सुराग https://stackoverflow.com/a/14623574 से प्राप्त किया गया था


1

मैं यह काम नहीं कर सका जब तक कि ऑटोइंडेक्स एपाचे मॉड्यूल स्थापित नहीं किया गया। कई ब्लॉग पोस्ट और फ़ोरम पोस्ट में से किसी ने भी इसका उल्लेख नहीं किया है। आशा है कि यह किसी की मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.