15

के अंदर मैं वर्चुअल डोमेन सिस्टम पर काम कर रहा हूं। मेरे पास वाइल्डकार्ड DNS है जो *.loc के रूप में स्थापित है, और मैं अपने .htaccess फ़ाइल पर काम करने की कोशिश कर रहा हूं। निम्नलिखित कोड काम करता है:।% एन बैकरेफर रिव्राइटकंड

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www.)?example\.loc$ [NC] 
RewriteCond %{REQUEST_URI} !^/example/ 
RewriteRule (.*) /example/$1 [L,QSA] 

लेकिन, मैं इस कुछ भी मैं में डाल के साथ काम करना चाहते हैं लेकिन, मैं %{REQUEST_URI} पाठ डोमेन के रूप में पाया के खिलाफ जाँच की जरूरत है।

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www.)?([a-zA-Z0-9-]*.)?([a-zA-Z0-9-]+)\.loc$ [NC] 
RewriteCond %{REQUEST_URI} !^/%3/ 
RewriteRule (.*) /%3/$1 [L,QSA] 

लेकिन लाइन RewriteCond %{REQUEST_URI} !^/%3/ एक आंतरिक सर्वर त्रुटि के जरिए मेरी कोड का कारण बनता है: मैं इस कोड का उपयोग कर की कोशिश की। मैं समझता हूं कि यह मेरे कोड में% N की वजह से है, लेकिन क्या मैं इसके साथ काम कर सकता हूं? मुझे इस लाइन की ज़रूरत है, अन्यथा मेरा कोड आंतरिक रीडायरेक्ट से विफल रहता है।

मुझे उम्मीद है कि यह किसी के लिए समझ में आता है। मुझे बस एक रिवाइटकंड में एक रिवाइटकंड में बैकरेफर करने में सक्षम होना चाहिए।

उत्तर

38

2 चीजें हैं जो आप यहां गलत कर रहे हैं।

सबसे पहले, आपके %{HTTP_HOST} regex कोई अच्छा नहीं है। आपको . डॉट्स से बचने की ज़रूरत है अन्यथा उन्हें "कोई भी चरित्र जो एक नई लाइन नहीं है" के रूप में माना जाएगा। यह अनिवार्य रूप से %3 टीएलडी (उदाहरण के लिए http://blah.bar.loc, % 3 = r) से पहले मेजबाननाम का अंतिम चरित्र बनाता है।

दूसरा, आप RewriteCond के रेगेक्स में बैकरेरेंस का उपयोग नहीं कर सकते हैं, केवल बाईं तरफ स्ट्रिंग, यह एक अजीब सीमा है। हालांकि, आप regex में \1 संदर्भों का उपयोग कर सकते हैं ताकि आप के खिलाफ मिलान करने के लिए एक चालाक बाएं तरफ स्ट्रिंग का निर्माण कर सकें। %3::%{REQUEST_URI} की तरह कुछ और फिर आप इस तरह से मेल खा सकते हैं: !^(.*?)::/\1/?। इस regex अनिवार्य रूप से कहते हैं: "मैच और पाठ के पहले खंड समूह:: से पहले, तो /(first block) साथ :: शुरू होता है निम्नलिखित यकीन है कि पाठ के ब्लॉक बनाने के"।

तो अपने नियम इस तरह दिखना चाहिए:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-zA-Z0-9-]*\.)?([a-zA-Z0-9-]+)\.loc$ [NC] 
RewriteCond %3::%{REQUEST_URI} !^(.*?)::/\1/? 
RewriteRule (.*) /%3/$1 [L,QSA] 
+0

चीयर्स! मुझे नहीं पता कि वह रेखा वास्तव में क्या करती है, लेकिन यह काम करती है। अभी के लिए, मैं उससे खुश हूँ। आपकी मदद की अत्यधिक सराहना की गई है :) –

+1

पृथ्वी पर यह दस्तावेज कहां है। इस उत्तर में इतने सारे वोटों का हकदार है। मैं वोट देता हूं कि हम जवाब को अस्वीकार करते हैं, बक्षीस देते हैं, और पुनः प्राप्त करते हैं। –

+0

बहुत चालाक! धन्यवाद =) – gobwas

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