अपाचे कॉन्फ़िगरेशन - सभी वर्चुअल होस्ट के लिए नियम फिर से लिखना


4

मेरे अपाचे पर 2 वर्चुअल मेजबानों के साथ निम्नलिखित कॉन्फ़िगरेशन है: www.domain.com और res.domain.com । पहला एक खुला है दूसरा पंजीकृत उपयोगकर्ताओं के लिए सीमित है।

<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !api/dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^api/.*$ api/dispatch.php [L,QSA]
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

मैं सभी कॉल http://res.domain.com/api/ * पर करना चाहता हूं, जैसे कि वे http://www.domain.com/api/ * हैं। कोई प्रमाणीकरण और समान व्यवहार नहीं ...

महत्वपूर्ण : मैं नहीं चाहता कि मेरे उपयोगकर्ता पुनर्निर्देशित हों ...

मुझे मदद की ज़रूरत है क्योंकि मैंने बहुत सी चीजों की कोशिश की लेकिन कोई सफलता नहीं मिली।

EDIT 1 यहाँ विचार वेब साइट (इस मामले में 'एपी') का एक हिस्सा है जो कोड की प्रतिकृति के बिना सभी वर्चुअल होस्ट से स्वतंत्र रूप से (= कोई प्रमाणीकरण के साथ) सुलभ है।

फ़ोल्डर:

   /वेबसाइट
     / www
       / img
       / API
       / सीएसएस
       / ...
     / रेस
       / ...

मैंने उपनाम, पुनर्लेखन और निर्देशिका ... पूर्व: के संयोजन की कोशिश की है

<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !api/dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^api/.*$ api/dispatch.php [L,QSA]
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   Alias /api /website/www/api
   <Directory "/website/www/api">
      Options FollowSymLinks
      AllowOverride All
      Satisfy Any
      Allow from all

      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^.*$ dispatch.php [L,QSA]
   </Directory>
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

इस स्थिति में, http://res.domain.com/api/ ... कॉल अभी भी मूल प्रमाणीकरण के साथ प्रतिबंधित है।


आपने "बहुत सी बातें" क्या कोशिश की हैं? यह मदद करता है अगर आप हमें बताएं ( इस जानकारी को शामिल करने के लिए अपनी पोस्ट को संपादित करें ), अन्यथा हम आपको बताने जा रहे हैं कि आप वापस जाएं और उन सभी को फिर से आज़माएं ...
voretaq7

क्या आप अपने उपनाम और पुनर्लेखन नियम सभी काम करते हैं जैसा कि आप res.domain.com/api पर उम्मीद करते हैं यदि आप / वेबसाइट / रेस पर पहुँच प्रतिबंध हटाते हैं?
मैट

@mindthemonkey दुर्भाग्य से नहीं: जब मैं सुरक्षा हटाता हूं तो मुझे एक पृष्ठ नहीं मिलता है जो res.domain.com/api / ... पर नहीं मिलता है
Alban Soupper

वैसे यह समझाने के लिए कुछ तरीका हो सकता है कि एक्सेस कॉन्फिगर क्यों न हो। जब आप यह अनुरोध करते हैं तो त्रुटि लॉग में क्या दिखाई देता है? क्या अपाचे स्टार्टअप के दौरान त्रुटि लॉग में कुछ और दिखाई देता है? यदि कुछ भी उपयोगी नहीं है तो आप डिबगेल को डीबग करने और फिर से प्रयास करने के लिए बढ़ा सकते हैं ।
मैट

जवाबों:


2

संतुष्ट । आपकी विशिष्ट आवश्यकता आवश्यकता डॉक्स में भी विस्तृत है ।

   <Directory "/website/res/api">
      Satisfy Any
      Allow from all
   </Directory>

फिर आपको res.domain.com vhost पर किसी भी पुनर्लेखन नियम की आवश्यकता होगी। यदि आप चाहते हैं कि आपके द्वारा वितरित की जाने वाली समान सामग्री को आपकी निर्देशिका के लिए पथ को बदलने की res.domain.comआवश्यकता हो ।res.domain.com/api/website/www/api


/ Webiste / res / api फ़ोल्डर मौजूद नहीं था क्योंकि लक्ष्य / वेबसाइट / www / एपीआई में एपीआई अनुभाग का फिर से उपयोग करना है। पोस्ट में मेरा अपडेट देखें
अल्बान सूपर

1

मैं समझ गया!

रिवर्टबेस गायब था। आखिरकार यह पहले डोमेन के कॉन्फ़िगरेशन में अनिवार्य नहीं है, यह दूसरे मामले में है!

मैं सर्वर स्तर पर "एपीआई" निर्देशिका कॉन्फ़िगरेशन को आगे बढ़ाते हुए किसी भी वर्चुअल होस्ट के लिए यह काम करने का प्रबंधन करता हूं। यह देता है:

# API Accessible from all domains
Alias /api /website/www/api
<Directory "/website/www/api">
   Options FollowSymLinks
   AllowOverride None
   Satisfy Any
   Allow from all

   RewriteEngine On
   RewriteBase /api/
   RewriteCond %{REQUEST_URI} !dispatch\.php$
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^.*$ dispatch.php [L,QSA]
</Directory>

# Virtual hosts
<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all 
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

ट्रिगर के लिए @mindthemonkey धन्यवाद;)

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