दिलचस्प पोस्ट
जावास्क्रिप्ट में वस्तुओं की एक सरणी में एक मान खोजें कार्य रिक्त या रिक्त ऑब्जेक्ट वापस लेना चाहिए? मैक-वन्य और सही फ़ॉरवर्डिंग "Android.view.विंडो प्रबंधक $ BadTokenException:" buider.show पर विंडो जोड़ने में असमर्थ () क्या वीएचडीएल रीएन्ट्रेंट में प्रक्रिया है? एंड्रॉइड: रिवर्स जीओकोडिंग – फिक्स्ड लॉकेशन क्या तेज है, MySQL के द्वारा अलग या समूह का चयन करें? समान परिणाम कैसे प्राप्त करें और समानता के अनुसार सॉर्ट करें? कोणीय जेएस का उपयोग करके एक ड्रॉपडाउन सूची नियंत्रण का एक चयनित विकल्प कैसे सेट करें Integer.parseInt (encapsulate करने का अच्छा तरीका) वसंत के साथ .html फ़ाइलों की सेवा कैसे करें स्थानीय स्टोरेज, सत्र स्टोरेज, सत्र और कुकीज़ के बीच अंतर क्या है? सी ++ वर्चुअल / शुद्ध वर्चुअल समझाया H: बटन और h के बीच का अंतर: कमांड बटन दो अंकों (अक्षांश, देशांतर) के बीच की दूरी की गणना करना

अपाचे mod_rewrite के साथ .html एक्सटेंशन कैसे छुपाएं

मेरे पास एक छोटी सी स्थिर साइट है जहां मैं बस .html एक्सटेंशन को छिपाना चाहता हूं:

  • url /foo स्थिर फ़ाइल /foo.html
  • ब्राउज़र अभी भी url /foo प्रदर्शित करता है

क्लाइंट तब mydomain.com/foo बजाय मेरी mydomain.com/foo शैली में बुकमार्क भेज सकता है।

यह बहुत आसान लग रहा है, और मैंने पहले mod_rewrite (वर्डप्रेस के साथ या रीडायरेक्ट के लिए) से पहले उपयोग किया है, लेकिन यह मुझे लगता है कि दरार करने के लिए बहुत कठिन साबित हो रहा है शायद मैं वास्तव में कुछ याद कर रहा हूं, लेकिन मुझे कहीं हल नहीं मिल रहा है और मैं पूरे दिन उस पर रहा हूं!

हम अपना स्वयं का सर्वर चलाते हैं, इसलिए यह सबसे अच्छा स्थान जहां भी हो सकता है।

परिशिष्ट

नीचे दिए गए समाधान ठीक काम किया। फिर साइट को चलाने के बाद थोड़ी देर मैंने दो समस्याएं देखीं:

  1. सभी पृष्ठों को अस्थिर दिखाई देने लगते हैं मैंने पुनः लोड किया, कैश को साफ किया, आदि, लेकिन अभी भी कोई शैली नहीं है मुझे पहले यह परेशानी थी, और स्रोत का पता नहीं लगा सकता

  2. एक निर्देशिका है और 'गैलरी' नाम की एक HTML फ़ाइल है, इसलिए / गैलरी लिंक HTML फ़ाइल के बजाय एक निर्देशिका सूची दिखाती है। मुझे उस सॉर्ट करने में सक्षम होना चाहिए, लेकिन अधिक युक्तियां स्वागत करती हैं 🙂

वेब के समाधान से एकत्रित समाधान "अपाचे mod_rewrite के साथ .html एक्सटेंशन कैसे छुपाएं"

इस नियम को आज़माएं:

 RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L] 

यह उन सभी अनुरोधों को दोबारा लिख ​​देगा जो एक मौजूदा फ़ाइल में मैप किए जा सकते हैं जब .html जोड़ते हैं

पिछला जवाब नहीं जांचते हैं कि अनुरोधित पथ एक निर्देशिका है या नहीं।

यहां पूर्ण पुनर्लेखन की स्थिति है जो पुनर्लेखन नहीं करती है, यदि अनुरोध किया गया पथ एक निर्देशिका है (जैसा कि मूल प्रश्न के अनुसार है):

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d # is not directory RewriteCond %{REQUEST_FILENAME}\.html -f # is an existing html file RewriteRule ^(.*)$ $1.html # rewrite index to index.html 

SEO के अनुकूल होने के लिए और दोहरी सामग्री से बचें, .html यूआरएल पुनर्निर्देशित करें:

 # Redirects domain.com/file.html to domain.com/file RewriteCond %{REQUEST_FILENAME} !-d # is not directory RewriteCond %{REQUEST_FILENAME}\.html -f # is an existing html file RewriteCond %{REQUEST_URI} ^(.+)\.html$ # request URI ends with .html RewriteRule (.*)\.html$ /$1 [R=301,L] # redirect from index.html to index 

यदि आपको स्क्रिप्ट के लिए समान की आवश्यकता है तो यहां एक नज़र डालें: मैं .php यूआरएल एक्सटेंशन को छुपाने के लिए .htaccess का उपयोग कैसे कर सकता हूं?

स्वीकार किए जाते हैं समाधान तब काम नहीं करता जब वेबसाइट वर्चुअल होस्ट / दस्तावेज़ रूट से कॉन्फ़िगर की जाती है।

मैं उपयोग किया समाधान है:

 RewriteEngine on RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.html -f RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L] 

इस पोस्ट को देखें http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/ मैंने अभी तक इसे करने की कोशिश नहीं की है, लेकिन प्रदर्शन बहुत ही समझदार लगता है।

 Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 

.*.html अनुरोधों से .html एक्सटेंशन को हटाने के लिए, आप root/.htaccess में निम्न स्क्रिप्ट का उपयोग कर सकते हैं:

 RewriteEngine On RewriteBase / #1) externally redirect "/file.html" to "/file" RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.html [NC] RewriteRule ^ %1 [R=301,L] #2) rewrite "/file" back to "/file.html" RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*?)/?$ $1.html [NC,L] 

यहां एक उदाहरण है जो हमें डिस्क पर फाइल को संग्रहीत करने की अनुमति देता है:

 foo.html.php 

लेकिन ब्राउज़र में, इसे देखें

 foo.html 

आपके लिए यह काम करने के लिए, मुझे लगता है कि आपको अपने मौजूदा अनुरोधों को पूरा करने के लिए इसे थोड़ा संशोधित करने की आवश्यकता होगी, और .html एक्सटेंशन के साथ एक वास्तविक फ़ाइल की जांच करें।

  # These are so we do not need the .php extension RewriteCond %{REQUEST_FILENAME} (\.xul|\.html|\.xhtml|\.xml)$', RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f', RewriteRule ^(.*)$ $1.php', 

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

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

 RewriteEngine on #if foo requested, return foo.html contents RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.html -f RewriteRule ^(.*)$ $1.html [L] #redirect foo.html to foo RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d RewriteRule ^(.+)\.html$ $1 [R,L] 

डिफ़ॉल्ट रूप से [R] ध्वज एक अस्थायी (302) रीडायरेक्ट करता है; यदि आप एक स्थायी रीडायरेक्ट चाहते हैं, तो R=301 स्थान पर R R=301 उपयोग करें