क्या बात है कि htaccess में किस क्रम के नियम रखे गए हैं?


9

मुझे आशा है कि यह एक सरल हाँ या कोई उत्तर नहीं है (कृपया निर्दिष्ट करें)

Q1: क्या बात है कि नियमों को htaccess में किस क्रम में रखा गया है? चूंकि वे पूरी तरह से अलग आइटम हैं: उदाहरण के लिए

Q2: यदि हाँ, क्या मैं सही आदेश लागू कर रहा हूँ? htacces इंजन को गति देने के लिए और इसे अप्राकृतिक नियमों के साथ अधिभार नहीं देने के लिए?

क्यू 3: किसी भी सुझाव के रूप में क्या निष्क्रिय / यहाँ जोड़ने के लिए स्वागत करते हैं +1!


# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /

#####################################################

<IfModule mod_headers.c>
    ExpiresActive On
    ExpiresDefault M172800
    Header unset ETag
    FileETag None
    Header unset Pragma

    ##### STATIC FILES
    <FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
        ExpiresDefault M1209600
        Header set Cache-Control "public, max-age=1209600"
    </FilesMatch>

    ##### DYNAMIC PAGES
    <FilesMatch "\\.(php)$">
        ExpiresDefault M604800
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

#####################################################

#  /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$  /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

####################################################

# NO WWW   http://www. becomes always http://
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz

##############################################################

ErrorDocument 500 /
ErrorDocument 404 /

जवाबों:


10

खैर, .htaccess फाइलें नियमित Apache कॉन्फ़िगरेशन फ़ाइल के समान प्रारूप का उपयोग करती हैं, इसलिए समान नियम लागू होते हैं।

अधिकांश कॉन्फ़िगरेशन सेटिंग्स ऑर्डर पर निर्भर नहीं होती हैं, लेकिन कुछ - सेटिंग पर निर्भर करती हैं।

RewriteRuleऔर RewriteCondउदाहरण के लिए संवेदनशील हैं, इसलिए उस मामले में उत्तर हां है।

उदाहरण देखें

http://wiki.apache.org/httpd/RewriteRule

आदेश के स्पष्टीकरण के लिए कि इन का मूल्यांकन किया जाता है।


4

कोई फर्क नहीं पड़ता। से हवाला देते हुए फिर से लिखना के लिए दस्तावेज़ :

जिस क्रम में इन नियमों को परिभाषित किया गया है वह महत्वपूर्ण है - यह वह क्रम है जिसमें उन्हें रन-टाइम पर लागू किया जाएगा।


1
Mod_rewrite के भीतर, यह मायने रखता है - हाँ। हालाँकि, OP विशेष रूप से mod_rewrite को संबोधित नहीं कर रहा है और OP की .htaccessफ़ाइल में अन्य मॉड्यूल से कई अन्य निर्देश हैं । संक्षेप में, अलग-अलग मॉड्यूल (और अलग-अलग कंटेनरों में ) स्वतंत्र रूप से और पूर्वनिर्धारित क्रम में निष्पादित होते हैं, विन्यास फाइल में उनके स्पष्ट आदेश की परवाह किए बिना।
MrWhite

1

मैं उदाहरण के लिए, <files>बनाम का क्रम कैसे <Rewrite>प्रभावित करता है, इस पर नहीं बोल सकता । मैं खुद यह पता लगाने की कोशिश कर रहा हूं। मुझे इस बारे में कोई जानकारी नहीं मिल पाई है, इसलिए संभवतः इससे कोई फर्क नहीं पड़ता है ??

हालांकि, मैं करते रहे कि बीच चाहें Rewriteबनाम Redirect(और RedirectMatch), निष्पादन के आदेश कर सकते हैं , सूचीबद्ध क्रम में नहीं हो, हालांकि है कि अक्सर लोग क्या अपेक्षा कर सकते हैं है ..
विशेष रूप से, mod_rewriteऔर mod_aliasमॉड्यूल कार्रवाई की जाती है / स्वतंत्र रूप से निष्पादित, और में वह आदेश।

  1. सभी mod_rewrite निर्देशों ( Rewrite) को निष्पादित किया जाता है (क्रम में वे सूचीबद्ध हैं)।
  2. तब सब mod_alias निर्देशों ( Redirectऔर RedirectMatch) क्रम में क्रियान्वित कर रहे हैं वे फ़ाइल में सूचीबद्ध हैं।

तो, भले ही एक Redirectएक आगे बढ़ता है Rewrite, रीडायरेक्ट कार्रवाई की जाएगी केवल के बाद सभी पुनर्लेखनों संसाधित किया गया है।

फ़ाइल को "पठनीय" रखने का एक तरीका यदि आपके पास पुनर्निर्देश और पुनर्लेखन दोनों हैं, तो mod_aliasमॉड्यूल का उपयोग बिल्कुल नहीं करना है । इसके बजाय, केवल उपयोग करें mod_rewrite। [R] ध्वज के साथ फिर से लिखना अनिवार्य रूप से इसे फिर से लिखना में बदल देता है।
इस वेबमास्टर का उत्तर दिखाता है कि कैसे।

अब, सभी निर्देश फ़ाइल में दिखाई देने वाले क्रम में निष्पादित किए जाएंगे, इसलिए निष्पादन के आदेश के बारे में कोई आश्चर्यजनक आश्चर्य या भ्रम नहीं है। वैकल्पिक रूप से, आप भौतिक रूप से सभी और निर्देशों को फ़ाइल के "नीचे" में स्थानांतरित कर सकते हैं , ताकि खुद को यह याद दिलाने के लिए कि उन्हें वैसे भी निष्पादित नहीं किया जाएगा । RedirectRedirectMatchRewrite

यहाँ कुछ अच्छे StackExchange उत्तर दिए गए हैं जो इस बिंदु पर प्रबुद्ध हैं:

बाकी के रूप में, मैं उदाहरण के लिए, एस के filesपहले या बाद में रखने के बीच प्रदर्शन पर कोई जानकारी नहीं पा सका हूं rewrite। एकमात्र प्रदर्शन आधारित सलाह जो मैंने पाया, वह यह है कि यदि किसी के पास सर्वर कॉन्फ़िगरेशन फ़ाइलों तक पहुंच है, तो यह संभव है कि .htaccess फ़ाइल से कॉन्फ़िग फ़ाइल में जितना संभव हो , और पूरी तरह से .htaccess फ़ाइलों को अक्षम करें (या जहां विशिष्ट निर्देशिका निर्दिष्ट करें)। .htaccess फ़ाइलों को पढ़ा जाना चाहिए)।

तर्क यह है कि कॉन्फिग फाइल में रखे गए नियमों को केवल एक बार पढ़ने की जरूरत है। यदि htaccess प्रसंस्करण चालू है, तो हर अनुरोध के लिए, सर्वर की प्रत्येक निर्देशिका (अनुरोधित निर्देशिका से अधिक या अधिक) संभावित htaccess फ़ाइलों के लिए खोज की जानी चाहिए, चाहे वे मौजूद हों या नहीं। और अगर वे करते हैं, तो हर एक को नए सिरे से पढ़ा जाना चाहिए।

  • अपाचे डॉक्स ने ".htaccess files" सेक्शन के नीचे इसका उल्लेख किया है, लेकिन यह नहीं समझाता है कि, और आपको यह पता लगाने के लिए चारों ओर खुदाई करनी होगी कि कैसे।
  • http://www.apacheweek.com/features/tips "अपाचे अनुभाग को कैसे गति दें" नेत्रहीन क्यों त्वरित क्रम में प्रदर्शित करता है ।
  • अपाचे प्रदर्शन: अक्षम करें .htaccess - "पहले अक्षम करें .htaccess और Apache config के भीतर mod_rewrite" अनुभाग को पढ़ने के लिए नीचे कूदें।

-1

मेरे पास एक ही चिंता का विषय है, लेकिन यह एक सर्वर व्यवस्थापक साइट का दृष्टिकोण है जो उन्हें अपाचे सर्वर कॉन्फ़िगरेशन बदलने के बाद अपाचे को फिर से शुरू करने की अनुमति देता है।

अब तक, मुझे जो सबसे अच्छी प्रतिक्रिया मिली है, वह फ़ाइल से संबंधित निर्देशों को पहले सूचीबद्ध करना है।

यह अपाचे की निर्देशिका और प्रत्येक निर्देशिका में htaccess निर्देशों का प्रबंधन करने की आवश्यकता से संबंधित समझ में आता है।

तो, पहले फ़ाइल संबंधी निर्देशों को सूचीबद्ध करें, फिर स्पष्ट के क्रम में अपाचे htaccess प्रक्रिया को समाप्त करने के लिए स्पष्ट ब्लॉक।

अनुरोधों को अनुकूलित करने के लिए संभावित समाधान: - url संबंधित सुधार का अनुरोध करें - निर्देशिका संबंधी प्रतिबंध - सूचकांक संबंधी प्रतिबंध - फ़ाइल संबंधी प्रतिबंध - प्रॉक्सी प्रतिबंध <- सभी को मारें - खाली उपयोगकर्ता एजेंट <- सभी को मारें ... सूची अंतहीन मज़ा है

निर्देशन के क्रम से जुड़ी मेरी चिंता। उदाहरण के लिए, क्या मुझे अनुक्रमणिका, फ़ाइल, और हैडर निर्देशों को रिवाइटरकॉन्ड से पहले सेट करना चाहिए?


फुटनोट: रीवेरिएट पैटर्न प्रतिस्थापन [झंडे] इस स्पष्ट अनुप्रयोग प्रसंस्करण प्रश्न का उत्तर न दें!
टेस्टबेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.