Drupal 8 में क्लीन URL से संबंधित समस्याओं का समाधान करें
मूल बातें
Drupal 8 में क्लीन URL डिफ़ॉल्ट रूप से सक्षम होते हैं और उन्हें निष्क्रिय नहीं किया जा सकता। हालाँकि, आपके वेब सर्वर पर mod_rewrite मॉड्यूल इंस्टॉल होना आवश्यक है।
अपने ब्राउज़र के एड्रेस बार की जाँच करें। आपकी साइट के URL में ?q= शामिल नहीं होना चाहिए।
सही “क्लीन URL” का उदाहरण:
http://www.example.com/node/83
“क्लीन URL” जो काम नहीं करते, उनका उदाहरण:
http://www.example.com/?q=node/83
विभिन्न प्रणालियों जैसे Apache, WAMP, XAMPP और IIS के लिए क्लीन URL सेटअप करने के अतिरिक्त निर्देश उपलब्ध हैं।
क्लीन URL के लिए सर्वर कॉन्फ़िगरेशन
आप वेब सर्वर की अन्य आवश्यकताओं के बारे में अधिक पढ़ सकते हैं।
httpd.conf के साथ डेडिकेटेड सर्वर पर क्लीन URL कॉन्फ़िगरेशन
डेडिकेटेड सर्वर पर क्लीन URL सक्षम करने के चरण:
1. Apache के लिए mod_rewrite सक्षम करें। इसके लिए अपने वेब होस्ट से संपर्क करें या Apache दस्तावेज़ देखें। कम से कम यह सुनिश्चित करें कि mod_rewrite आपके Apache इंस्टॉलेशन में सक्षम है।
mod_rewrite उपलब्ध है या नहीं, यह जांचने के लिए निम्न कमांड चलाएँ:
apache2ctl -M
कुछ प्रणालियों में यह कमांड इस प्रकार हो सकता है:
apachectl -M
या
httpd -M
2. आउटपुट में देखें कि rewrite_module सक्षम है या नहीं।
यदि यह सूची में नहीं है, तो आपको इसे कॉम्पाइल या लोडेबल मॉड्यूल के रूप में जोड़ना होगा:
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
ये पंक्तियाँ अपने Apache कॉन्फ़िगरेशन फ़ाइल (जैसे httpd.conf) में जोड़ें। यदि AddModule mod_rewrite.c टिप्पणी की गई है, तो उसे अनकमेंट करें। आप मॉड्यूल को बिना फ़ाइल संपादित किए सक्षम करने के लिए यह कमांड भी चला सकते हैं:
a2enmod rewrite
इसके बाद Apache पुनः प्रारंभ करें ताकि बदलाव प्रभावी हों।
3. अपने Apache कॉन्फ़िगरेशन फ़ाइल का पता लगाएँ (httpd.conf, vhost.conf, या apache2.conf)। यह आमतौर पर /etc/httpd/conf या /etc/apache2 में स्थित होती है। यदि नहीं मिलती, तो यह कमांड चलाएँ:
find /etc -name httpd* या find /etc -name apache2*
यदि आपके पास इन फ़ाइलों में लिखने की अनुमति नहीं है और क्लीन URL काम नहीं कर रहे हैं, तो अपने सिस्टम एडमिनिस्ट्रेटर या होस्टिंग प्रदाता से संपर्क करें।
4. अब Drupal की .htaccess फ़ाइल से rewrite नियमों को Apache कॉन्फ़िगरेशन में जोड़ें:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
Debian 8 + Apache2 + ISPConfig के लिए एक उदाहरण:
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
यदि आप Apache कॉन्फ़िगरेशन में नियम नहीं जोड़ना चाहते, तो आप Drupal की .htaccess फ़ाइल का उपयोग कर सकते हैं। इसके लिए Apache में यह सेट करें:
AllowOverride All AccessFileName .htaccess
Apache .htaccess के पीछे की प्रक्रिया और AllowOverride निर्देशों को देखें।
MultiViews नोट: Apache की “MultiViews” सुविधा URL क्लीनिंग में समस्या पैदा कर सकती है। इसे निष्क्रिय रखना बेहतर है जब तक आप सुनिश्चित न हों कि इसकी आवश्यकता है।
शेयर्ड सर्वर पर .htaccess के साथ क्लीन URL कॉन्फ़िगरेशन
Drupal की मानक स्थापना में एक .htaccess फ़ाइल शामिल होती है जो क्लीन URL के लिए पर्याप्त होती है। सुनिश्चित करें कि यह फ़ाइल मौजूद है (यह “.” से शुरू होती है, इसलिए छिपी हो सकती है)।
टर्मिनल में ls -a
चलाएँ ताकि छिपी फ़ाइलें दिखाई दें।
यदि फ़ाइल मौजूद है और फिर भी क्लीन URL काम नहीं करते, तो नीचे दिए गए ट्रबलशूटिंग टिप्स आज़माएँ।
समस्या निवारण
क्या .htaccess काम कर रहा है, यह जाँचें
Apache को .htaccess निर्देशों का पालन करने के लिए AllowOverride All सेट करना आवश्यक है। यह डिफ़ॉल्ट रूप से बंद होता है।
जाँचने के लिए, .htaccess में अस्थायी रूप से एक गलत पंक्ति जोड़ें। यदि पेज लोड करने पर “500 Internal Server Error” आता है, तो .htaccess काम कर रहा है। यदि नहीं, तो यह अनदेखा किया जा रहा है।
RewriteBase कॉन्फ़िगरेशन
.htaccess में RewriteBase सेटिंग कुछ सर्वर सेटअप्स के लिए आवश्यक हो सकती है। उदाहरण के लिए, यदि Drupal एक सबडायरेक्टरी /var/www/mysite/
में है, तो:
RewriteBase /mysite
या सरल कॉन्फ़िगरेशन के लिए:
RewriteBase /
$base_url
यदि क्लीन URL काम नहीं कर रहे हैं, तो settings.php में $base_url
को मैन्युअली सेट करें। यह FastCGI सर्वरों पर अक्सर आवश्यक होता है।
मल्टी-साइट इंस्टॉलेशन
यदि आप एक से अधिक साइट चला रहे हैं, तो प्रत्येक के लिए Rewrite नियम सेट करें। उदाहरण के लिए:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/mysite/ RewriteRule ^ /mysite/index.php [L]
index.php फ़ाइल का स्थान
कुछ सर्वर सेटअप्स में, आपको .htaccess में RewriteRule ^ index.php [L]
को बदलकर /subdir/index.php
जैसा पथ उपयोग करना पड़ सकता है।
Path मॉड्यूल से क्लीन URL बनाना
क्लीन URL Drupal को “http://www.example.com/node/83” जैसे लिंक उत्पन्न करने की अनुमति देता है। यदि आप “node/##” की जगह “news/june-1st-news” जैसा URL चाहते हैं, तो Path मॉड्यूल सक्षम करें। अधिक जानकारी के लिए Path मॉड्यूल दस्तावेज़ देखें।