URL से .html कैसे निकालें?


112

.htmlस्थैतिक पृष्ठ के URL से कैसे निकालें ?

इसके अलावा, मुझे इसके .htmlबिना किसी भी यूआरएल को पुनर्निर्देशित करने की आवश्यकता है। (यानी www.example.com/page.htmlकरने के लिए www.example.com/page)।


1
"निकालें। Html" से, क्या आपका मतलब है ".html मौजूद होने की आवश्यकता नहीं है"?
लाइटवेट दौड़ ऑर्बिट

@Tomalak: हाँ और बिना रीडर्स के ".html" के साथ भी इनडायरेक्ट करता है। मेरी समस्या यह है कि इससे अनंत पुनर्निर्देशन होता है। मेरा वर्तमान सेटअप www.example.com/page.html और www.example.com/page दोनों को सुलभ बनाता है जो एसईओ के अनुकूल नहीं है।
डेव


@Tomalak: सुझावों के लिए धन्यवाद। Mod_rewrite का प्रलेखन पढ़ना बहुत सहायक था।
डेव

जवाबों:


105

मुझे लगता है कि जॉन के जवाब की कुछ व्याख्या रचनात्मक होगी। निम्नलिखित:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

जाँचता है कि यदि निर्दिष्ट फ़ाइल या निर्देशिका क्रमशः मौजूद नहीं है, तो नियम फिर से लिखना है:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

लेकिन इसका क्या मतलब है? यह रेगेक्स (नियमित अभिव्यक्ति) का उपयोग करता है । यहाँ कुछ मैं पहले बनाया है ... यहां छवि विवरण दर्ज करें

मुझे लगता है कि यह सही है।

नोट: जब परीक्षण अपने 301 पुनर्निर्देश का उपयोग .htaccess नहीं करते। समाप्त परीक्षण तक 302 का उपयोग करें, क्योंकि ब्राउज़र 301s को कैश करेगा। Https://stackoverflow.com/a/9204355/3217306 देखें

अद्यतन: मैं थोड़ा गलत था, .सभी वर्णों को मेल खाता है, नई सूची को छोड़कर, जिसमें व्हाट्सएप भी शामिल है। इसके अलावा, यहाँ एक सहायक रेगेक्स चीट शीट है

सूत्रों का कहना है:

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules


6
जवाब समझाने में मदद करने के लिए शानदार आरेख।
रिक

301s और ब्राउज़र कैश पर टिप वह है जो मेरे मुद्दों को हल करती है।
bgfvdu3w

@KnocksX मैं अब एक वेबमास्टर नहीं हूं और मदद करने में सक्षम होने की स्थिति में नहीं
हूं

84

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

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

नोट: यदि आप .php एक्सटेंशन निकालने के लिए उदाहरण के लिए किसी अन्य एक्सटेंशन निकालने के लिए, चाहते हैं, बस की जगह एचटीएमएल के साथ हर जगह php उपरोक्त कोड में।


10
अन्य जवाबों में से किसी ने भी मेरे लिए काम नहीं किया, लेकिन इसने बहुत धन्यवाद किया!
एम्मेट्स ने

2
इसने भी मेरे लिए काम किया। साभार @starkeen एक ^ वोट है।
जेरेमीस 18

2
पूरी तरह से ठीक काम किया। धन्यवाद!
ixany

यह मेरे लिए फ़ाइल एक्सटेंशन को हटा देता है लेकिन उस पृष्ठ पर रीडायरेक्ट नहीं करता है
भार्गव वेंकटेश

74

अपाचे के तहत .htaccess के साथ आप इस तरह रीडायरेक्ट कर सकते हैं:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

Url से .html को हटाने के लिए, बस बिना .html के पेज से लिंक करें

<a href="http://www.example.com/page">page</a>

23
यह मेरे लिए कुछ नहीं करता है। वहाँ कुछ कारण यह काम नहीं करेगा?
माइकल यावोरस्की

क्या आपके पास अनुरोधित लिंक के लिए एक वास्तविक फ़ाइल है? इससे !-f
मार्टिज़न

72

यह आपके लिए काम करना चाहिए:

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

3
मुझे इस कोड के साथ Godaddy में 404 मिल रहा था और मैंने इसे लगाते हुए तय किया: बहुत टॉप पर Options + FollowSymLinks -MultiViews -Indexes।
लाबानिनो

1
मुझे लगता है कि यह सबसे अच्छा और सबसे पूर्ण उत्तर है, धन्यवाद!
ctekk

मैंने इसे लोकलहोस्ट में करने की कोशिश की, लेकिन यह काम नहीं कर रहा है, क्या मुझे कोई अन्य चीज़ करने की ज़रूरत है, क्या मुझे .htaccess फ़ाइल को लिंक करना है, या पृष्ठ इसे कैसे पहचानता है?
Pianistprogrammer

मैं .php एक्सटेंशन को # 301 से example.com/page.html से example.com/page पर कैसे जोड़ूँ, क्या यह संभव है?

20

आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपके पास Options -MultiViewsभी है।

उपरोक्त में से किसी ने भी मेरे लिए मानक cPanel होस्ट पर काम नहीं किया।

यह काम किया:

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

ऊपर दिए गए सभी उत्तरों में से एक ने आखिरकार काम किया .. मुझे विश्वास है क्योंकि मेरी साइट cPanel के साथ Godaddy पर होस्ट की गई है। कुंजी है विकल्प -मूल्टिव्यूज़
ब्रैड

हां, इस अनुभाग में कुछ भी नहीं काम करता है इस उत्तर की उम्मीद है! आपने दिन बचा लिया!
नील बैनेट

धन्यवाद दोस्त। मुझे यकीन नहीं है कि दूसरों ने उम्मीद के मुताबिक काम क्यों नहीं किया।
नानू

13

आपके उत्तर के लिए धन्यवाद। मैंने अपनी समस्या पहले ही हल कर ली है। मान लीजिए कि मेरे पास http://www.yoursite.com/html के तहत मेरे पृष्ठ हैं , निम्नलिखित .htaccess नियम लागू होते हैं।

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]
</IfModule>

6

मैं इसे हटाने के लिए .htacess का उपयोग करता हूं। मेरी url साइट से .html विलोपन, कृपया सत्यापित करें कि यह सही कोड है:

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

यह मेरे लिए काम करने के लिए लग रहा था, यहां प्रस्तुत अन्य समाधानों के विपरीत, धन्यवाद। मैं यह जोड़ना चाहूंगा कि आपको अभी भी अपने HTML में लिंक (अपडेट) को अपडेट करने की आवश्यकता है (इसलिए यदि आप मूल रूप से अपनी .html फ़ाइल को <a href="page1.html"> </a> के रूप में लिंक कर रहे हैं, तो आपको अपडेट करना चाहिए) यह <a href=" example.com/page1"> </ a > के रूप में काम करेगा और फिर यह काम करेगा।)
लोरेंजो

मेरे लिए मुख्य बदलाव RewriteBase /थोड़ा था । दुर्भाग्य से मुझे समझ नहीं आया कि यह क्यों काम किया, लेकिन मुझे लगता है कि मैं जल्द ही सीखूंगा।
केनो क्लेटन

4

जो लोग फायरबेस का उपयोग कर रहे हैं, उनमें से कोई भी उत्तर इस पृष्ठ पर काम नहीं करेगा। क्योंकि आप .htaccessFirebase होस्टिंग में उपयोग नहीं कर सकते । आपको firebase.json फ़ाइल को कॉन्फ़िगर करना होगा। बस "cleanUrls": trueअपनी फ़ाइल में लाइन जोड़ें और इसे सहेजें। बस।

लाइन जोड़ने के बाद firebase.json इस तरह दिखेगा:

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

2

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

#mode_rerwrite start here

RewriteEngine On

# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.

RewriteCond %{REQUEST_FILENAME} !-d

#Check for file in directory with .html extension 

RewriteCond %{REQUEST_FILENAME}\.html !-f

#Here we actually show the page that has .html extension

RewriteRule ^(.*)$ $1.html [NC,L]

धन्यवाद


-1
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

यह कोशिश करो :) अगर यह काम करता है पता नहीं है।


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