2008-10-18 10 views
7

मुझे एक टोमकैट 6 वेब ऐप मिला है जो अपाचे httpd के साथ फ्रंट एंड के रूप में चल रहा है। मैं tomcat के अनुरोधों को अग्रेषित करने के लिए mod_proxy और mod_proxy_ajp का उपयोग कर रहा हूं। मेरा सर्वर उबंटू चला रहा है। अब मैं अग्रणी www दूर करने के लिए है, इसलिए है कि मेरी विहित वेबसाइट यूआरएल है http://domain.com बल्कि http://www.domain.com सेमैं समस्या निवारण कैसे करूं कि मेरे पुनर्लेख नियम अपाचे द्वारा क्यों लागू नहीं किए जा रहे हैं?

मैं mod_rewrite का उपयोग कर पर ट्यूटोरियल की एक संख्या पढ़ा है mod_rewrite उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं किसी भी करने के लिए पुनर्लेखन नहीं मिल सकता है काम। मैंने rehite rule को .htaccess फ़ाइल में डालने का प्रयास किया है (मेरे/etc/apache/साइट-उपलब्ध/डिफ़ॉल्ट फ़ाइल को सभी को अनुमति दें सेट करने के लिए संशोधित करने के बाद)। मैंने apache2.conf, httpd.conf, और rewrite.conf में पुनर्लेखन नियम डालने का प्रयास किया है। मैंने इन सभी को पुन: लिखने के साथ चालू करने की कोशिश की है। लॉग फ़ाइल बनाई गई है, लेकिन अपाचे ने इसके लिए कुछ भी नहीं लिखा है। मैंने सोचा कि शायद mod_proxy किसी भी तरह से पुनर्लेखन नियमों को इस्तेमाल करने से रोक रहा था, इसलिए मैंने इसे अक्षम करने का भी प्रयास किया ... और मुझे अभी भी कोई पुनः लिखना नहीं है, और लॉग के लिए कुछ भी नहीं है।

इस बिंदु पर मुझे बिल्कुल पता नहीं है कि आगे क्या प्रयास करना है। मैं समस्या निवारण के बारे में कैसे जा सकता हूं क्यों अपाचे मेरे पुनर्लेखन नियमों का उपयोग नहीं कर रहा है?

संदर्भ के लिए, मेरे फिर से लिखने के निर्देश दिए गए हैं:

<IfModule mod_rewrite.c> 

    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] 
    RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L] 
    RewriteLog "/var/log/apache2/rewrite.log" 
    RewriteLogLevel 3 

</IfModule> 

संपादित: नीचे की प्रतिक्रियाएं मेरी विशेष मामले के लिए उपयोगी होते हैं, लेकिन शायद के रूप में के बारे में कैसे जवाब के रूप में समुदाय पर बड़े के लिए उपयोगी नहीं आप सामान्य रूप से अपाचे निर्देशों का निवारण करते हैं। उदाहरण के लिए, क्या उस बिंदु पर लॉगिंग सक्षम करने का कोई तरीका है जहां यह मुझे बताएगा कि कौन से निर्देश लागू किए जा रहे हैं, जिसमें अनुरोध के रूप में आदेश दिया गया है?

संपादित करें 2: मुझे अब काम करने के लिए चीज़ें मिल गई हैं। मेरे आभासी मेजबान बिल्कुल सही नहीं थे, और मेरे पास रीराइट रीजिक्स सही नहीं था। यहां काम करने के लिए मिले अंतिम पुनर्लेख निर्देश यहां दिए गए हैं:

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC] 
     RewriteRule ^(.*)$ http://domain.com$1 [L,R=301] 
</IfModule> 
+0

क्या आपने यह सुनिश्चित किया है कि mod_rewrite लोड हो गया है? –

+0

हां। मैंने इसे "a2enmod rewrite" का उपयोग करके लोड किया है, जो मॉड-सक्षम में mod \ _rewrite.load को इंगित करने के लिए मोड-सक्षम में एक सिम्लिंक सेट करता है। मैंने जानबूझकर फिर से लिखने के नियमों में से एक को गलत तरीके से गलत तरीके से गलत तरीके से गलत तरीके से याद किया है (यानी "रिवाइट 3 नियम") यह जांचने के लिए कि नियम वास्तव में अपाचे द्वारा उठाए जा रहे हैं, और अपाचे मुझे एक त्रुटि संदेश देता है जैसा कि मैं उम्मीद करता हूं। जब मैं वर्तनी को ठीक करता हूं और अपाचे को पुनरारंभ करता हूं तो यह ठीक हो जाता है। –

उत्तर

4

अपने प्रश्न जवाब देने के लिए कोशिश कर रहा है। लेकिन अगर आप debug डालते हैं, तो यदि आप प्रश्न के लिए मॉड्यूल के लिए लॉग अक्षम करते हैं तो आपको इससे कोई संदेश नहीं मिलता है। उदाहरण के लिए, डिफ़ॉल्ट [RequestLogLevel][2] 0 है, उदाहरण के लिए, मॉड्यूल कोई संदेश नहीं लिखता है।मुझे लगता है कि आपने इसे 3 पर सेट किया है लेकिन RoBorg की तरह कहा गया है कि इसे 9 पर बदलें जो शायद आपके मामले के लिए बहुत कम हो।

आपकी समस्या sove की कोशिश: जिस तरह से आप होस्ट नाम उलटा फ़ॉर्म का उपयोग करके फिर से लिखने बदलने की कोशिश - देखो अगर होस्ट नाम आप क्या चाहते हैं और, अगर नहीं, होस्ट नाम आप चाहते हैं के लिए इसे बदल। जैसा अपाचे साइट पर URL Rewriting Guide - Apache HTTP Server में कहा गया है:

विहित होस्ट का नाम

विवरण: इस नियम के लक्ष्य के अन्य होस्ट नामों को वरीयता में, एक विशेष होस्ट नाम का उपयोग कराने के लिए है जो का उपयोग उसी साइट तक पहुंचने के लिए किया जा सकता है। उदाहरण के लिए, यदि आप example.com के बजाय www.example.com का उपयोग करना चाहते हैं, तो आप निम्न नुस्खा के एक प्रकार का उपयोग कर सकते हैं। समाधान:

# To force the use of 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^/(.*)   http://www.example.com/$1 [L,R] 

उनके उदाहरण में, वे www.example.com करने के लिए example.com से बदल सकता है लेकिन आप विचार आया। बस इसे अपने मामले के लिए समायोजित करें।

+0

से शुरू कर सकते हैं डॉट कैरेक्टर से बचने से इस मामले में कोई फर्क नहीं पड़ता –

+1

डॉट अभी भी एक बिंदु से मेल खाता है भले ही एक बच निकला डॉट केवल वास्तविक बिंदु से मेल खाता हो एक अनपेक्षित डॉट डॉट डॉट को मिलान करने वाला डॉट समेत कुछ भी मैच करेगा। –

+0

आप दोनों सही हैं। मेरी गलती। उत्तर अपडेट किया गया। –

0

लॉगिंग स्तर को 9 (अधिकतम) तक बढ़ाने का प्रयास करें।
सुनिश्चित करें कि अपाचे के पास लॉग फ़ाइल के उचित अधिकार हैं (हालांकि अगर इसे बनाया गया है, तो ऐसा लगता है कि यह भी इसे लिख सकता है)।
एक अलग पुनर्लेखन नियम, कोई शर्त के साथ, उदाहरण के RewriteRule .* www.google.com [RL]

+0

अच्छा सुझाव, लेकिन मैं अभी भी फिर से लिखने या लॉग में कुछ भी नहीं देख रहा हूं। –

1

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

</IfModule> 

अपने सर्वर के साथ एक ही समस्या थी के लिए प्रयास करें, लेकिन इस

0

काम किया जो संदर्भ में इन नियमों को रखा जाता है? उदाहरण के लिए, आप उन्हें एक अलग वर्चुअल होस्ट के तहत रख सकते हैं। यदि आपके पास परीक्षण करने के लिए केवल एक डोमेन है तो उन्हें किसी भी कंटेनर से बाहर रखने का प्रयास करें।

किसी भी मामले में, 'नो-www' प्राप्त करने का एक विकल्प है, जिसमें दो वर्चुअल होस्ट का उपयोग किया जाता है, एक www के लिए और दूसरा 'नो-www' के लिए होता है। www एक दूसरे पर रीडायरेक्ट: डिबग करने के लिए अपाचे आपरेशन आप एक निचले स्तर (शायद debug) को LogLevel समायोजित कर सकते हैं:

<VirtualHost *:80> 
    ServerName www.domain.com 
    Redirect permanent/http://domain.com 
</VirtualHost> 


<VirtualHost *:80> 
    ServerName domain.com 
    #The rest of the configuration (proxying, etc.) 
</VirtualHost> 
+0

मैंने इन्हें अपने /etc/apache2/apache2.conf, /etc/apache2/httpd.conf, /etc/apache2/mods-available/rewrite.conf में रखने की कोशिश की है (जो/etc/apache2/mods से symlinked है -सक्षम)। मेरी समझ यह है कि ये नियम हमेशा लागू होंगे। मैं केवल एक डोमेन/वर्चुअल होस्ट चला रहा हूं। –

+0

मैंने आपके सुझाव की कोशिश की, और अपाचे ने पोर्ट 80 भाग (*: 80) को शामिल करने के बारे में शिकायत की: [त्रुटि] वर्चुअलहोस्ट *: 80 - मिश्रण * पोर्ट्स और गैर-* पोर्ट्स नाम वर्चुअलहोस्ट पते के साथ समर्थित नहीं है, अपरिभाषित परिणामों के साथ आगे बढ़ना । मैंने पोर्ट नंबर निकाला, और यह ठीक हो गया, लेकिन कोई रीडायरेक्ट नहीं हुआ। –

+1

यह स्टैक ओवरफ़्लो की तुलना में आईआरसी के लिए एक मामला अधिक उपयुक्त है। डीबग करने के लिए कई विन्यास हैं। Irc.freenode.net पर #apache आज़माएं यदि यहां कोई भी सुझाव काम नहीं करता है। –

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