2011-07-20 17 views
12

मैं एक ऐसे ऐप पर काम कर रहा हूं जो यूआरएल रीराइट्स का उपयोग करता है और इसमें एक विशिष्ट। Htaccess कॉन्फ़िगरेशन है। जब एप्लिकेशन पर काम कर मैं तीन eviorments है:। विकास, स्टेजिंग और उत्पादन के बीच htaccess

  1. developent अपने स्थानीय मशीन पर (स्थानीय होस्ट)
  2. मचान (staging.mydomain.com)
  3. उत्पादन (www.mydomain.com)

मैं लगातार स्टेजिंग और उत्पादन वातावरण में नए अपग्रेड को दबा रहा हूं और हर बार जब मैं मौजूदा स्रोत कोड को ओवरराइट करता हूं तो मुझे .htaccess फ़ाइल में बदलाव करना पड़ता है। क्या कोई तरीका है कि मैं निर्देशिका के लिए जेनरेट कर सकता हूं या इसे स्वचालित रूप से अपने पर्यावरण का पता लगा सकता हूं?

मेरी वर्तमान। Htaccess फ़ाइल नीचे है। मैं अलग-अलग वातावरण के बीच खंडों को अन-टिप्पणी करता हूं लेकिन इसे करना बंद करना पसंद करूंगा ...

# Development 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA] 

# Staging 

# RewriteEngine on 
# RewriteCond %{REQUEST_FILENAME} !-f 
# RewriteCond %{REQUEST_FILENAME} !-d 
# RewriteCond %{REQUEST_URI} !=/favicon.ico 
# RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA] 

# Production 

# RewriteEngine on 
# RewriteCond %{REQUEST_FILENAME} !-f 
# RewriteCond %{REQUEST_FILENAME} !-d 
# RewriteCond %{REQUEST_URI} !=/favicon.ico 
# RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA] 

अग्रिम धन्यवाद!

चक

+0

पथ अलग क्यों हैं, फिर भी/favicon.ico समान है? –

+2

मैं केवल वर्चुअल होस्ट सेट अप करता हूं ताकि आपके पास प्रत्येक वातावरण में एक ही यूआरएल हो। तब आपको उनके बीच। Htaccess को बदलने की आवश्यकता नहीं होगी। – Quentin

उत्तर

13
# Development 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteCond %{HTTP_HOST} ^localhost 
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA] 

# Staging 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteCond %{HTTP_HOST} ^staging.mydomain.com 
RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA] 

# Production 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteCond %{HTTP_HOST} ^www.mydomain.com 
RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA] 
+0

'% {REQUEST_HOST}' पुरानी चर है?मुझे mod_rewrite दस्तावेज़ों में केवल समकक्ष '% {HTTP_HOST}' मिला। –

+0

@ जॉनीवॉन्ग, हाँ, ऐसा लगता है: https://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond ने 'HTTP_HOST' var के साथ उत्तर अपडेट किया। , जवाब मामले में आप किसी भी अन्य समस्याओं का पता लगाने को संपादित करने के लिए स्वतंत्र महसूस के बाद से मैं 2011 के बाद से मुझे लगता है कि अपाचे का उपयोग नहीं करते;) –

7

एक विकल्प में httpd.conf (या कहीं और) सेटअप वातावरण चर होगा कि अपने पर्यावरण को परिभाषित।

उदाहरण (httpd.conf में) के लिए:

SetEnv ENVIRONMENT production 

(.htaccess में)

RewriteEngine on 

# Development 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} != /favicon.ico 
RewriteCond %{ENV:ENVIRONMENT} = development 
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA] 

# Staging 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} != /favicon.ico 
RewriteCond %{ENV:ENVIRONMENT} = staging 
RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA] 

# Production 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} != /favicon.ico 
RewriteCond %{ENV:ENVIRONMENT} = production 
RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA] 

untested है, लेकिन मुझे लगता है अवधारणा काफी ध्वनि यह पता लगाने की है किसी भी मुद्दे ;-)

+0

+1 महान आप अपाचे conf के लिए उपयोग किया है, तो है क्योंकि आप तो क्या की परवाह किए बिना पर्यावरण सेट कर सकते हैं यूआरएल है स्थानीय विकास करता है जहां आप होस्ट किए गए सर्वरों के लिए एक अलग यूआरएल का उपयोग बहुत आसान – Precastic

0

चक डी, डुमित्रु सेबान का संस्करण बहुत अच्छा है। लेकिन मेरा सुझाव है कि आप अपने कोड में कुछ ध्वज रखने का विकल्प भी प्रयास करें - नहीं। Htacces में।

इसके अलावा, rudi_visser का अच्छा सुझाव। लेकिन मैं यहां जोड़ना चाहता हूं, कि आदर्श प्रणाली में हमें केवल अपाचे के * .conf का उपयोग करना चाहिए और गिरावट। Htaccess (केवल एक बेवकूफ प्रदर्शन)।

तो मेरा सुझाव है कि आप कोड में कुछ झंडा प्राप्त करें, इससे बचें। Htacess (यदि आप कर सकते हैं) और env स्विच करें। सरल conf मूल्य द्वारा या if locaslhost == host then ...

+0

या आदर्श प्रणाली के लिए हम केवल उत्पादन पर ही - * conf का उपयोग कर सकते हैं। – gaRex

+0

मुझे नहीं लगता कि आधुनिक सिस्टम पर .htaccess का प्रदर्शन अब और चिंता करने के लिए कुछ भी है! लेकिन वैसे भी मुझे नहीं लगता कि इस तर्क को कोड में डालने से इस स्थिति में इस तथ्य की मदद मिलेगी कि अपाचे को पता नहीं चलेगा कि अनुरोधों को रूट करने के लिए कहां जाना है। –

+0

@rudi_visser, यकीन नहीं है कि। Htaccess उत्पादन पर पर्याप्त है। और PHP पता कर सकता है कि आपके ढांचे के अंदर कौन सा तर्क पारित करना है: टीएम/पैथ का उपयोग करने के लिए डीबी कनेक्शन कौन सा है। – gaRex

1

जैसे कुछ तर्क के आधार पर आप न सिर्फ वातावरण में से प्रत्येक पर अपने .htaccess फ़ाइलें रख सकते हैं, और फिर बस जो कुछ भी एफ़टीपी में फ़ाइल को अनदेखा या प्रोग्राम का उपयोग कर रहे तैनात?

वैकल्पिक, मैं अपने स्थानीय होस्ट में VirtualHosts सेट अप करता हूं जो उत्पादन साइट के समान डोमेन है, लेकिन dev. उपसर्ग के साथ। उदाहरण के लिए, www.example.com और dev.example.com। इस तरह, मैं हमेशा यह सुनिश्चित कर सकता हूं कि रूट जो भी मेजबान मैं उपयोग कर रहा हूं, वह शीर्ष-स्तरीय निर्देशिका है, चाहे पर्यावरण चाहे; और मुझे अपने .htaccess निर्देशों को फिर से लिखने की आवश्यकता नहीं है।

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