मुझे .htaccess में <if> निर्देश का उपयोग कैसे करना चाहिए?


16

मैं अपने .htaccess फ़ाइल में Apache’s if निर्देशक का उपयोग करके एक सशर्त कथन जोड़ने का प्रयास कर रहा हूं।

मैंने इस पृष्ठ http://httpd.apache.org/docs/trunk/mod/core.html#if को संदर्भित किया है, लेकिन यह बहुत विस्तृत नहीं करता / कई उदाहरण देता है। इसके दो अधूरे उदाहरण हैं:

<अगर% {REQUEST_METHOD} GET, HEAD, OPTIONS> में 

तथा

<यदि "$ req {होस्ट} = ''"> 

इसलिए मैंने इसे अपने .htaccess फ़ाइल में जोड़ने की कोशिश की है:

<अगर% {SERVER_PORT} GET, HEAD, OPTIONS> में
   # यहाँ अभी तक नहीं
</ तो>

लेकिन जब मैं कोशिश करता हूं और पेज लोड करता हूं तो मुझे एरर 500 मिलता रहता है । यह मेरे स्थानीय इंस्टॉल पर है, और यह पहले ठीक काम कर रहा था (या यदि मैं उस कोड को हटाता हूं)। मेरा मानना ​​है कि मैंने AllowOverride Allविश्व स्तर पर स्थापित किया है, और यदि निर्देश के लिए संदर्भ को इसे .htaccess ("संदर्भ: सर्वर कॉन्फ़िगरेशन, वर्चुअल होस्ट, निर्देशिका, .htaccess") में मौजूद होना चाहिए।

क्या कोई मुझे कुछ उदाहरण दे सकता है कि कैसे ठीक से उपयोग करने के लिए <if> निर्देश, या कुछ मार्गदर्शन क्यों यह मेरे लिए काम नहीं कर रहा है?

धन्यवाद!


1
यदि आपको 500 त्रुटि मिल रही है, तो इसका मतलब है कि अपाचे ने आपकी त्रुटि लॉग में कुछ लॉग किया है। यह क्या कहता है? इसके अलावा, के लिए अपने परीक्षण SERVER_PORTमें GET,HEAD,OPTIONSकिसी भी मतलब नहीं है ( SERVER_PORTजिस पर अनुरोध प्राप्त हुआ था संख्या पोर्ट संख्या होने जा रहा है)।
लार्क्स

धन्यवाद, लार्क्स। ऐसा लगता है कि मैं अपाचे 2.0 चला रहा हूं जो <if> निर्देश का समर्थन नहीं करता है। शायद मुझे 2.3 में अपग्रेड करने की आवश्यकता है। कम से कम यह बताता है कि कहीं भी कोई उदाहरण नहीं है (b / c फीचर इतना नया है)। सलाह के लिए धन्यवाद।
cwd

जवाबों:



16

<If> केवल Apache 2.4+ में उपलब्ध है, इसलिए सबसे पहले सुनिश्चित करें कि आपके पास वह संस्करण है।

उदाहरण

# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
  Redirect permanent "/" "http://www.example.com/"
</If>

<If "%{HTTP_HOST} =~ /regex/">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

<If "%{REQUEST_URI} =~ m#/regex/including/slashes/#">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

के लिए विकल्प <If>

Apache 2.2 में सशर्त कथन करने के लिए कुछ अन्य समाधान हैं यदि आप अभी भी उसी के साथ अटके हुए हैं।

  • आप इसके माध्यम से पर्यावरण चर सेट कर सकते हैं:

    • अपाचे विन्यास
    • SetEnvIf
    • mod_rewrite के RewriteMatch
  • तब आप सशर्त विवरण का उपयोग करके प्रदर्शन कर सकते हैं

    <IfDefine MyEnvironmentVar>
       ...
    </IfDefine>
    

उदाहरण:

# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX

# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX

# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX

1
टेस्ट करो लेकिन काम नहीं! एपाचे से दस्तावेज़ में, <IfDefine>स्टार्टअप पर केवल पार्स का निर्देशन करें और parameter-nameकेवल कमांड प्रॉम्प द्वारा पास कर सकते हैंhttpd -Dx=y
विलियम लेउंग

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