मैं अपनी .htaccess फ़ाइल में URL पुनर्लेखन कैसे लागू कर सकता हूँ?


17

मैं कुछ URL पुनर्लेखन करना चाहूंगा (क्यों? इस प्रश्न को देखें ।) ताकि उपयोगकर्ताओं के बजाय पते जैसे देख सकें

labouseur.com/course-compilers.html 

वे इसके बजाय बस देख और उपयोग कर सकते हैं

labouseur.com/course-compilers

(इससे भी बेहतर, शायद मुझे इसका पुनर्गठन करना चाहिए ताकि यह पाठ्यक्रम / संकलक हो।)

मैं अपनी वेबसाइट के लिए लिनक्स-आधारित साझा होस्टिंग सेवा का उपयोग कर रहा हूं, इसलिए मेरे पास सर्वर का प्रशासनिक नियंत्रण नहीं है, लेकिन मेरे पास .htaccess पर नियंत्रण नहीं है। मैंने जो संदर्भ ऑनलाइन पढ़ा है वह मेरे लिए स्पष्ट से कम प्रतीत होता है, इसलिए मैं यहां थोड़ी स्पष्टता और सलाह की तलाश कर रहा हूं।


ध्यान दें कि यह कुछ ऐसा नहीं है जो आप केवल सर्वर कॉन्फ़िगरेशन (.htaccess) में करते हैं। महत्वपूर्ण पहला कदम वास्तव में आपके आवेदन में यूआरएल को बदलना है, अन्यथा आप बहुत सारे अनावश्यक रीडायरेक्ट (या डुप्लिकेट) को समाप्त कर देंगे।
MrWhite

जवाबों:


13

आप वास्तव में। Html को अपने सर्वर की फाइलों से हटा सकते हैं और htaccess में सेटिंग्स सेट कर सकते हैं ताकि वे html फ़ाइलों के रूप में काम करें, लेकिन यह शायद वह नहीं है जो आप खोज रहे हैं।

यह करो :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html

यहां अधिक जटिलता है, खासकर यदि आप डुप्लिकेट सामग्री समस्याओं के बारे में चिंतित हैं। ऊपर दिए गए नियम के साथ, आपके पृष्ठ अभी भी पुराने URL से सुलभ होंगे।
जेसनबेरच

3

पहले, सुनिश्चित करें कि अपाचे में मॉड्यूल है और इसे .htacces फ़ाइलों में अनुमति दी गई है, फिर जोड़ें:

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

आपके उदाहरण की आवश्यकता होगी

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

एकल-स्तरीय निर्देशिका संरचना के लिए और

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

एक बहु-स्तरीय संरचना के लिए।

लेकिन सावधान रहें

यदि आपके पास संरचना है

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

बाल .htaccessफ़ाइलों में पुनर्लेखन नियम उनके मूल फ़ोल्डर के सापेक्ष होंगे और आप कुछ गंदे पुनर्लेखन पाश स्थितियों में प्राप्त कर सकते हैं । RewriteCondयदि आप कर सकते हैं तो उन्हें रोकने के लिए उपयोग करना सुनिश्चित करें !


क्या आपको उस अंतिम बिंदु पर अधिक विस्तार में जाने का मन करता है (छोरों को रोकने के लिए रिवरटाइकंड का उपयोग करके)?
ट्रैविस नॉर्थकट

2

उपरोक्त उत्तरों के अतिरिक्त कोई भी उपयोग कर सकता है

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) अक्षरों, अंकों को एक हाइफ़न (-) की अनुमति देता है।

(.*) हर अनुरोध की परवाह किए बिना फिर से लिखेंगे, जो कि निम्नलिखित अन्य नियमों को नपुंसक कर सकता है, जिससे एक्सेस करने पर आंतरिक सर्वर त्रुटि हो सकती है।


आपका RewriteRule पैटर्न प्रश्न में दिए गए विशिष्ट उदाहरण के लिए स्वीकृत उत्तर पर एक सुधार है, हालांकि, यह अधिक सामान्य मामले से मेल खाने में विफल होगा, जब एक से अधिक पथ खंड होते हैं, जैसे। /path/to/course-compilersLनिम्न नियमों पर प्रभाव को कम करने के लिए ध्वज को शामिल करें । जबकि (.*)पैटर्न अनावश्यक रूप से सामान्य है, यह गंभीर समस्या पैदा करने की संभावना नहीं है, क्योंकि उस स्थिति के कारण जो फ़ाइल की जांच करती है।
MrWhite

1

इसे पूरा करने के लिए आपको .htaccess फ़ाइल का उपयोग नहीं करना होगा। बस अपनी फ़ाइलों को निर्देशिकाओं में संरचना करें, और "labouseur.com/course-compilers.html" का उपयोग करने के बजाय, बस फ़ाइल index.html को नाम दें और इसे "पाठ्यक्रम-संकलक" नामक एक निर्देशिका में डालें। फिर जब आप उस निर्देशिका को इंगित करते हैं, तो इंडेक्स डिफ़ॉल्ट रूप से दिया जाता है, लेकिन URL में प्रदर्शित नहीं किया जाएगा। तो आप बस "labourseur.com/course-compilers" के रूप में अपने लिंक लिख सकते हैं और सब ठीक हो जाएगा।

कोई .htaccess की आवश्यकता नहीं है।

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