सवाल अपाचे वर्चुअलहोस्ट के भीतर यूआरएल रीडायरेक्ट करें?


मेरे पास अपाचे के साथ एक समर्पित सर्वर है, जिस पर मैंने कुछ वर्चुअलहोस्ट सेट किए हैं। मैंने www डोमेन के साथ-साथ गैर-www डोमेन को संभालने के लिए एक सेट अप किया है।

Www के लिए मेरी VH .conf फ़ाइल:

<VirtualHost *>
  DocumentRoot /var/www/site
  ServerName www.example.com
  <Directory "/var/www/site">
    allow from all
  </Directory>
</VirtualHost>

इसके साथ .htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Www को गैर-www संस्करण में रीडायरेक्ट करने का कोई आसान तरीका है? वर्तमान में मैं दोनों संस्करणों को एक ही भेज रहा हूं DocumentRoot और उपयोग कर रहे हैं .htaccess लेकिन मुझे यकीन है कि मैं इसे वर्चुअलहोस्ट फ़ाइल में करने में सक्षम होना चाहिए।


56
2018-03-08 20:56


मूल


stackoverflow.com/questions/42500012/... - rajeev


जवाब:


पता चला है mod_rewrite वर्चुअलहोस्ट्स फ़ाइल में नियम ठीक हैं, इसके अलावा RewriteBase राज करते हैं। मैं इसके साथ समाप्त हुआ:

<VirtualHost *>
  ServerName www.example.com
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.example.com
  RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>

संपादित करें: टिप्पणियों में जोशी की सलाह पर, अब मैं इसका उपयोग कर इस सरलीकृत संस्करण का उपयोग कर रहा हूं Redirect से निर्देश mod_alias:

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

101
2018-03-08 21:34



इसके लिए आपको mod_rewrite की आवश्यकता नहीं है। इसके बजाए mod_alias और इसके रीडायरेक्ट स्थायी निर्देश का प्रयोग करें। - joschi
@ जोस्ची: इसका क्या फायदा होगा? क्या यह तेज़ है? - DisgruntledGoat
क्लाइंट को रीडायरेक्ट करने के लिए आपको अपने सभी चेक और संभावनाओं के साथ पूर्ण उड़ाए गए रीराइट इंजन की आवश्यकता नहीं है। यह (मामूली) तेज होगा क्योंकि mod_alias mod_rewrite के रूप में जटिल नहीं है और आपको केवल mod_rewrite के साथ दो के बजाय एक निर्देश (रीडायरेक्ट स्थायी) की आवश्यकता होगी। और आखिरी लेकिन कम से कम IMHO यह समझना आसान नहीं है कि कॉन्फ़िगरेशन में क्या होता है जब कोई इसे पहली बार देखता है। - joschi
कुछ अजीब कारणों से रीडायरेक्ट 301 .. हमारे लिए काम नहीं किया। हमें रिवाइटरूल विकल्प का उपयोग करना पड़ा। - so_mv
नोट: विंडोज सर्वर 2008 आर 2 एंटरप्राइज़ पर WAMPSERVER 2.0 पर PHP 5.3.0 का उपयोग करना शामिल नहीं है :80 बाद VirtualHost * का कारण बनता है सब कुछ "निषिद्ध" वापस करने के लिए! - Cees Timmerman


301 रीडायरेक्ट के साथ बहुत सावधान रहें क्योंकि, डिफ़ॉल्ट रूप से, एक ब्राउज़र जो 301 रीडायरेक्ट प्राप्त करता है उसे स्थायी रूप से संग्रहीत करेगा - जिसका अर्थ है कि आप डोमेन को एक्सेस करने का प्रयास करते समय उस ब्राउज़र को देखेंगे कि वह ब्राउज़र क्या देखेगा www.example.com

उदाहरण के लिए इस चर्चा देखें http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/

तो या तो सुनिश्चित करें कि यह कैश नहीं मिलता है, या mod_proxy का उपयोग करें (मैं mod_proxy की अनुशंसा करता हूं)।

यदि आप ब्राउज़र पता बार पर यूआरएल परिवर्तन देखने के लिए ठीक हैं, तो mod_rewrite का उपयोग करें:

<VirtualHost *>
 ServerName www.example.com
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.example.com
 RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1]
## Set the response header if the "nocache" environment variable is set
## in the RewriteRule above.
 Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
## Set Expires too ...
 Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</VirtualHost>

यदि आप उपयोगकर्ता को "रीडायरेक्ट" अदृश्य होना चाहते हैं, तो mod_proxy का उपयोग करें:

<VirtualHost *>
 ServerName www.example.com
 ProxyRequests Off
 <Proxy *>
 Order Deny,Allow
 Deny from all
 Allow from 203.0.113.67
 </Proxy>
 ProxyPass / http://example.com/
 ProxyPassReverse / http://example.com/
</VirtualHost>

यह ध्यान दिया जाना चाहिए कि mod_proxy, जब बुरी तरह कॉन्फ़िगर किया गया है, तो आपके नेटवर्क को नुकसान पहुंचा सकता है।


3
2018-01-18 11:29



301 का बिंदु यह है कि यह एक है स्थायी अनुप्रेषित; यदि आप एक गैर-स्थायी रीडायरेक्ट चाहते हैं, तो आपको इसके बजाय 302 या 307 का उपयोग करना चाहिए। - nickgrim


आप जोड़ सकते हो ServerAlias example.com को VirtualHost लेकिन प्रदर्शन एक रीडायरेक्ट से अलग होगा।

संपादित करें

चूंकि आप रीडायरेक्ट करना चाहते हैं और आपको उन्नत कार्यक्षमता की आवश्यकता नहीं है, ऐसा लगता है कि यह उपयोग करने जैसा लगता है Redirect आपके लिए पर्याप्त होना चाहिए आप डाल देंगे Redirect वर्चुअलहोस्ट निर्देश के तहत।

क्लाइंट साइड समाधान का उपयोग करना होगा meta refresh टैग।


2
2018-03-08 21:00



क्या आप थोड़ा आगे बता सकते हैं? मैं कैसे रीडायरेक्ट करूंगा www.example.com सेवा मेरे example.com इस विधि का उपयोग कर? - DisgruntledGoat
आपके प्राथमिक vhost में, आपके पास दोनों के लिए प्रविष्टियां हैं ServerName तथा ServerAlias। एक example.com और अन्य www.example.com है। फिर, दोनों डीएनएस प्रविष्टियां एक ही vhost में निर्दिष्ट दस्तावेजों तक पहुंच जाएगी। - Warner
मैं एक करना चाहता हूँ अनुप्रेषित हालांकि, सिर्फ एक उपनाम नहीं। - DisgruntledGoat
फिर जोशची की सिफारिश आपके लिए एक अच्छा दृष्टिकोण हो सकती है। ऐसा लगता है कि इस बिंदु पर बाल विभाजित किए जा रहे हैं। - Warner


अच्छा, आप SERVERNAME www.example.com के लिए एक वर्चुअल होस्ट बना सकते हैं और इसे servername example.com के साथ किसी अन्य वर्चुअल होस्ट पर रीडायरेक्ट कर सकते हैं


1
2018-03-08 21:18