URL परिवर्तनांची उदाहरणे. HTTPS आणि www सह कॅनॉनिकल नाव सक्ती करा. mod_rewrite सक्षम आहे का ते कसे तपासायचे

चेरचर 10.05.2019
शक्यता

काही कारणास्तव, रशियन इंटरनेटवर वेब सर्व्हरच्या स्थानिक सेटिंग्जबद्दल माहिती आहे अपाचेकॉन्फिगरेशन फाइलद्वारे .htaccessहे कसेतरी अपूर्ण आणि एकतर्फीपणे सादर केले आहे. मुख्यतः उदाहरणे (अनेकदा काम करत नाहीत) किंवा इंग्रजी-भाषेतील दस्तऐवजीकरणाची कोरडी भाषांतरे दिली जातात.

परंतु तुम्हाला अनेक रीडायरेक्ट सेट करण्याची आवश्यकता असल्यास आणि सर्व शक्ती शिकण्यासाठी वेळ नसल्यास काय? .htaccess? बाहेर पडण्याचा एकमेव मार्ग म्हणजे तयार उदाहरणे घेणे आणि यादृच्छिकपणेआपल्या गरजांशी जुळवून घ्या. या लेखात मी एक लहान मार्गदर्शक लिहीन .htaccess, जे नवशिक्यांसाठी बहुतेक प्रश्नांची उत्तरे देईल. मी तपशीलवार सूचनांचे दुवे देखील प्रदान करेन. हा लेख आवश्यकतेनुसार अद्यतनित केला जाईल, परंतु मी सर्वात मूलभूत सह प्रारंभ करेन.

पुनर्निर्देशित करते

मॉड्यूल वापरून पुनर्निर्देशन केले जातात mod_rewrite. परिवर्तनाचे नियम खालील बांधकामाच्या स्वरूपात निर्दिष्ट केले आहेत:

पर्याय +FollowSymLinks RewriteEngine वर [Write Rules Here]

परिवर्तनाचे नियम खालीलप्रमाणे लिहिले आहेत:

RewriteCond [तुलना STRING] [अट] [ध्वज] पुनर्लेखन [तुलना स्ट्रिंग] [अटी] [ध्वज] पुनर्लेखन नियम [पॅटर्न] [बदली STRING] [ध्वज]

तार RewriteCond- पुढील नियम ट्रिगर करण्यासाठी अटी सेट करा पुनर्लेखन नियम. अनेक अटी असू शकतात, त्या नियमानुसार लादल्या जातात आणि. पण तुम्ही नियम बदलू शकता किंवाध्वज वापरून किंवा.

म्हणून [तुलनेसाठी ओळी]विविध व्हेरिएबल्स वापरल्या जाऊ शकतात. संपूर्ण यादीचा दुवा मी फक्त तेच देईन ज्यांना बर्याचदा आवश्यक असते:

रेग्युलर एक्सप्रेशन्समधील सबएक्सप्रेशन्स (कंसात बंद) मध्ये घालण्यासाठी उपलब्ध आहेत [बदली STRING], तुम्हाला अशा उप-अभिव्यक्तींमध्ये प्रवेश करणे आवश्यक आहे: %N- परिस्थितीत उप-अभिव्यक्तीसाठी ( RewriteCond) आणि $N- नियमांमधील उप-अभिव्यक्तीसाठी ( पुनर्लेखन नियम), कुठे एन- उप-अभिव्यक्तीचा अनुक्रमांक.

पुनर्लेखन नियम- प्रतिस्थापन नियम. विनंती उच्च-स्तरीय चेक पूर्ण करत असल्यास आणि [नमुना], नंतर प्रतिस्थापन नियम लागू होतो. येथे तुम्ही ध्वज वापरून वर्तन नियंत्रित करू शकता. वेगवेगळे ध्वज आहेत, येथे सर्वात जास्त वापरलेले ध्वज आहेत:

मला आशा आहे की सिद्धांताच्या माझ्या संक्षिप्त परिचयानंतर, तुमच्यामध्ये काय लिहिले आहे हे समजून घेणे तुम्हाला सोपे होईल .htaccess. मी मॉड्युल बद्दल खूप चांगल्या भाषांतराची लिंक देतो mod_rewrite, तुम्हाला तेथे इतर चांगली भाषांतरे देखील मिळू शकतात.

लक्ष द्या! ब्राउझर कॅशे पुनर्निर्देशन!!!

शिवाय, नेहमीच्या जोड्या आवडतात Ctrl+F5किंवा Ctrl+Rमदत करू नका. चाचणी दरम्यान, मी प्रत्येक वेळी गुप्त मोडमध्ये नवीन विंडोमध्ये पृष्ठ उघडतो. शिवाय, गुप्त मोडमधील जुनी पृष्ठे बंद करणे आवश्यक आहे.

उदाहरणे

www वरून www शिवाय सार्वत्रिक पुनर्निर्देशन

येथे सर्वात मनोरंजक गोष्ट आहे: काही कारणास्तव, साइटच्या डोमेनशी कठोरपणे जोडलेली उदाहरणे सर्वत्र दिली आहेत. का?, जर सार्वत्रिक उपाय असेल तर:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1

आम्ही डोमेन नाव तपासतो, जर ते www ने सुरू झाले तर नियम कार्य करेल: “सर्व काही चालू आहे http://%1/$1". इथे %1 हे www शिवाय आमचे डोमेन आहे (अटीवरून घेतलेले), आणि $1 हा पत्ता आहे (नियमातूनच घेतलेला).

www शिवाय www वरून सार्वत्रिक पुनर्निर्देशन

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_HOST) !^www\.

पुनर्लेखन नियम ^(.*)$ http://www.%1/$1 %1 येथे थोडे अधिक क्लिष्ट आहे. डोमेन मिळविण्यासाठी पहिली अट आवश्यक आहे (

), हे नेहमीच खरे असते. दुसरी अट तपासते की डोमेन www ने सुरू होत नाही. बरं, नियम स्वतः मागील उदाहरणासारखाच आहे

साधे पुनर्निर्देशन

RewriteRule ^news/happy.* /news.html

साध्या पुनर्निर्देशनासाठी, अटी सेट करणे आवश्यक नाही, फक्त एक नियम.

पुनर्निर्देशित न करता पुन्हा लिहा

RewriteRule ^news/happy.* /news.html [L] काहीवेळा पत्ता न बदलता पुनर्निर्देशित करणे आवश्यक असते, उदा. पुनर्निर्देशित न करता पुन्हा लिहा. हे करण्यासाठी, आम्ही फक्त पुनर्निर्देशित ध्वज निर्दिष्ट करत नाही (आर ), आणि आम्हाला अपेक्षित परिणाम मिळतो, आता येथेबातमी/आनंदी आम्हाला मिळते news.html ), आणि आम्हाला अपेक्षित परिणाम मिळतो, आता येथे

, आणि ॲड्रेस बारमध्ये ते राहील

GET पॅरामीटर्सवरून पुनर्निर्देशित करा उदाहरणार्थ, आपल्याला पृष्ठावरून काहीतरी हवे आहे/?action=page&id=15 वर पुनर्निर्देशन होते:

/पृष्ठ/१५/

RewriteCond %(QUERY_STRING) action=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? मला समजावून सांगा, आम्ही प्रथम अटी तपासतो की गेट पॅरामीटर आहेक्रिया = पृष्ठ , दुसऱ्या अटीसह आम्ही तपासतो की id संख्या समान आहे. या अटी एकत्र केल्या जाऊ शकत नाहीत, कारण पॅरामीटर्स उलट जाऊ शकतात, उदा. index.php?action=page&id=15 आणि index.php?id=15&action=page ? समतुल्य असणे आवश्यक आहे. परंतु शेवटी, एक नियम म्हणून, तेथे प्रश्नचिन्ह वगळता सर्व काही सामान्य आहे ( ) शेवटी. मूळ GET पॅरामीटर्स कापण्यासाठी आम्हाला याची आवश्यकता आहे, अन्यथा आम्हाला मिळेल

/page/15/?action=page&id=15

साइटच्या मोबाइल आवृत्तीवर पुनर्निर्देशित करा चला गृहित धरू की मोबाइल आवृत्ती सबडोमेनवर स्थित आहे m.site.ru

. आम्ही फक्त मुख्य डोमेनच्या मुख्य पृष्ठावरून मोबाइल आवृत्तीवर स्विच करू.

पहिली ओळ आम्ही तपासतो USER_AGENT, आम्ही निर्धारित करतो की ती मोबाइल फोनचा संदर्भ देते. (मी ही ओळ तपशीलवार तपासली नाही, मी ती इंटरनेटवरून घेतली आहे, कदाचित ती पूर्णपणे बरोबर नसेल किंवा आणखी सार्वत्रिक ओळ आहे. परंतु हे उदाहरण माझ्या मोबाइल डिव्हाइसवर कार्य करते)

दुसरी ओळ तपासते की आम्ही इच्छित डोमेनवर आहोत (उदाहरण सार्वत्रिक नाही)

तिसऱ्या ओळीने, आम्ही तपासतो की आम्ही मुख्य पृष्ठावर आहोत (कोणत्याही पॅरामीटर्सशिवाय किंवा इतर कशाशिवाय) आणि सबडोमेनवर पुनर्निर्देशित करतो.

सार्वत्रिक आवृत्ती

मला प्रत्येक गोष्ट सार्वत्रिक असणे आवडते, जेणेकरून समान कोड कोणत्याही बदलाशिवाय वेगवेगळ्या प्रकल्पांवर कार्य करू शकेल. हे करण्यासाठी मी मागील उदाहरण सुधारित केले:

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mibb| symbian|वायरलेस|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mm |पॅनासोनिक |iphone|android) RewriteRule ^$ http://m.%1

मुख्य पृष्ठावरून पुनर्निर्देशित करा

सारख्या विनंतीबद्दल बोलत आहोत site.ru(site.ru/index.php शिवाय)

असे दिसून आले की सर्व काही इतके स्पष्ट नव्हते;

कामाचा पर्याय:

RewriteRule ^index.php$ /about/ [L]

पुनर्निर्देशित करा. नाहीकार्यरत आवृत्ती:

RewriteRule ^index.php$ /about/

पुनर्निर्देशनाशिवाय पुन्हा लिहा (URL बदलत नाही). नाहीकार्यरत आवृत्ती:

RewriteRule ^$ /about/ [L]

पुनर्निर्देशित करा. कामाचा पर्याय:

RewriteRule ^$ /about/

जर कोणी मला सांगितले की ही उदाहरणे उलटे का काम करतात, परंतु त्याउलट काम करत नाहीत, तर मला खूप आनंद होईल.

.htaccess कॉन्फिगरेशन फाइल अपाचे वेब सर्व्हरसाठी एक कॉन्फिगरेशन आहे. बहुतेक होस्टिंग साइट या सर्व्हरद्वारे कार्य करतात, म्हणून प्रत्येक साइटवर ही फाइल असते. वेबमास्टर स्वतःचे बदल करून त्याचे ऑपरेशन अंशतः नियंत्रित करू शकतात. या लेखात आपण सर्व्हरच्या ऑपरेशनमध्ये बदलता येणारे निर्देश आणि नियम पाहू.

सर्वात महत्वाची .htaccess फाइल साइटच्या रूटवर स्थित आहे:

त्याची क्रिया वर्तमान निर्देशिकेवर आणि सर्व उपनिर्देशिकांवर लागू होते. त्या. साइट मालकांना संपूर्ण सर्व्हरच्या कामात हस्तक्षेप न करता केवळ त्यांच्या प्रकल्पाच्या कामावर प्रभाव टाकण्याची संधी आहे. ही फाइल गहाळ असल्यास, ती कोणत्याही नोटपॅड वापरून तयार केली जाऊ शकते. मुख्य गोष्ट अशी आहे की फाईलचे नाव ".htaccess" असावे - .txt, .doc, इ. स्वरूपांशिवाय.

.htaccess फाईल वापरून, 301 पुनर्निर्देशन बहुतेकदा सर्व्हर स्तरावर कॉन्फिगर केले जातात, जे नवीन पृष्ठावर जाण्याच्या प्रक्रियेस मोठ्या प्रमाणात गती देतात, कारण मध्यवर्ती पृष्ठ लोड करण्याची आवश्यकता नाही. हे देखील निर्दिष्ट करते की कोणती फाइल 404 त्रुटीवर प्रक्रिया करते.

खाली आम्ही .htaccess द्वारे पुनर्निर्देशित करण्यासाठी सर्व सामान्य पर्याय पाहू, आणि प्रथम आम्ही पर्याय आणि नियमांशी परिचित होऊ.

पुनर्निर्देशनासह कार्य करण्यास सक्षम होण्यासाठी, तुम्हाला ReWriteEngine मॉड्यूल सक्षम करणे आवश्यक आहे. हे करण्यासाठी, तुम्हाला कोडच्या दोन ओळी लिहिण्याची आवश्यकता आहे (शक्यतो .htaccess फाइलच्या अगदी शीर्षस्थानी):

पर्याय +FollowSymLinks RewriteEngine चालू

mod_write मॉड्यूल निर्देशांसह कार्य करण्यास सक्षम होण्यासाठी या ओळी आपल्या .htaccess फाइलच्या अगदी शीर्षस्थानी ठेवा.

तसेच, mod_alias मॉड्यूल होस्टिंगवर सक्षम केलेले असणे आवश्यक आहे (Redirect, RedirectPermanent आणि RedirectMatch ला समर्थन देण्यासाठी).

1. रीडायरेक्ट, रीराईटरूल आणि रिराईटकॉन्ड नियम

१.१. निर्देश पुनर्निर्देशित करा

वाक्यरचना पुनर्निर्देशित करा:

पुनर्निर्देशित / पासून http://where_full_address

पुनर्निर्देशन एका पृष्ठावरून दुसऱ्या पृष्ठावर थेट पुनर्निर्देशन सेट करते.

रीडायरेक्ट कोड स्टेटसमध्ये लिहिलेला आहे. एक पर्यायी पॅरामीटर आहे. बहुतेकदा ते 301 लिहितात, जे पृष्ठ पत्त्याच्या कायमस्वरूपी बदलाचे संकेत देतात.

साइटचा पूर्ण पत्ता न दर्शवता, परंतु स्लॅश "/" (म्हणजे साइटच्या मूळपासून) सुरू होणारी संपूर्ण संबंधित URL दर्शविल्याशिवाय "प्रेषक" पृष्ठ फॉरमॅटमध्ये लिहिलेले असणे महत्त्वाचे आहे. ज्या पानावर पुनर्निर्देशन केले जाते ते पूर्ण लिहिणे आवश्यक आहे, म्हणजे. परिपूर्ण URL पृष्ठ पत्ता (उदा. डोमेन नाव आणि http किंवा https प्रोटोकॉलसह).

उदाहरणार्थ

301 /oldpage.php http://site/newpage.php पुनर्निर्देशित करा

तुम्ही ते वेगळ्या पद्धतीनेही लिहू शकता

स्थायी 301 /oldpage.php http://site/newpage.php पुनर्निर्देशित करा किंवा स्थायी 301 /oldpage.php http://site/newpage.php पुनर्निर्देशित करा

१.२. RewriteRule निर्देश

RewriteRule निर्देश संक्रमण नियम सेट करते. वाक्यरचना खालीलप्रमाणे आहे:

RewriteRule पॅटर्न प्रतिस्थापन [कोड]
  • जेव्हा बाह्य पुनर्निर्देशन होते, तेव्हा ब्राउझर ओळीतील URL बदलते - " "
  • अंतर्गत - ब्राउझर ओळीत URL बदलत नाही - " " किंवा "[L] "

१.३. RewriteCond निर्देश

RewriteCond निर्देश RewriteRule मधील नियम ज्या अटींखाली अंमलात आणतात ते परिभाषित करते.

RewriteCond तुलना_स्ट्रिंगअट

उदाहरणार्थ, या अटी वापरकर्त्याचा ब्राउझर, IP पत्ता, शीर्षक इत्यादी असू शकतात.

१.४. RedirectMatch निर्देश

रीडायरेक्टमॅच डायरेक्टिव्ह हे रीडायरेक्ट सारखेच आहे, फरक एवढाच आहे की तो तुम्हाला रेग्युलर एक्सप्रेशन्स लिहू देतो.

वरून रीडायरेक्टमॅच

2. .htaccess मधील 301 पुनर्निर्देशनाची उदाहरणे

आम्ही लेखांमध्ये .htaccess पुनर्निर्देशनासह अनेक उदाहरणे आधीच पाहिली आहेत:

  • वेबसाइट पत्ता बदलणे - जुन्या डोमेनवरून नवीनवर पुनर्निर्देशित करणे

येथे आम्ही पुनर्निर्देशनांसाठी पर्याय जोडू जे अद्याप अस्तित्वात नव्हते.

२.१. एका पृष्ठावरून दुसऱ्या पृष्ठावर पुनर्निर्देशित करा

site.ru/cat/oldpage वरून site.ru/newpage.html वर पुनर्निर्देशित करा

RewriteRule ^cat/oldpage.* /newpage.html

किंवा दुसरा पर्याय:

301 /cat/oldpage पुनर्निर्देशित करा http://www.site.com/newpage.php

२.२. सर्व .htm फाइल्समधून .html वर पुनर्निर्देशित करा

RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

किंवा दुसरा पर्याय:

पुनर्लेखन नियम ^(.*)\.htm$ $1.html

२.३. संपूर्ण निर्देशिका दुसऱ्या पृष्ठावर पुनर्निर्देशित करा

/old/ निर्देशिकेतील कोणतेही पृष्ठ आणि उपनिर्देशिका /new.php वर पुनर्निर्देशित केले जातील

RewriteRule ^old(.*)$ /new.php

२.४. URL मधून अतिरिक्त स्लॅश काढून टाकणे

उदाहरणार्थ, पृष्ठ /catalog///stranica.html प्रवेशयोग्य आहे आणि उघडते. ही परिस्थिती टाळण्यासाठी आणि असंख्य डुप्लिकेट तयार न करण्यासाठी, तुम्ही खालील पुनर्निर्देशन लिहावे

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule .

%1/%2

२.५. पुनर्निर्देशित न करता पुन्हा लिहा

तुम्ही पेज URL न बदलता वेगळे पेज लोड करू शकता. उदाहरणार्थ, पृष्ठ /news.html लोड करू, आणि ॲड्रेस बार पत्ता /news/happy प्रदर्शित करेल

RewriteRule ^news/happy.* /news.html [L]

२.६. मुख्यपृष्ठ पत्त्याच्या शेवटी ट्रेलिंग स्लॅश जोडणे

उदाहरणार्थ, अनेक सर्व्हर अशा प्रकारे कार्य करतात की शेवटचा स्लॅश URL मध्ये लिहिलेला नाही. उदाहरणार्थ, http://site.ru. खालील कोड या समस्येचे निराकरण करतो: साइट http://site.ru/ वर उघडेल

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/

२.७. URL वरून निर्देशिका निर्देशिका काढत आहे उदाहरणार्थ, पृष्ठावरून पुनर्निर्देशित करण्यासाठी site.com/directoriya/stranica.html

site.com/stranica.html वर तुम्हाला खालील प्रविष्ट करणे आवश्यक आहे:

किंवा दुसरा पर्याय:

RewriteCond RewriteRule ^directoriya/(.+)$ http://site.com/$1%(DOCUMENT_ROOT)/directoriya/$1

-f RewriteRule ^(.*)$ Directoriya/$1

२.८. GET पॅरामीटर्स पुनर्निर्देशित करा

उदाहरणार्थ, पृष्ठ /?act=page&id=2 वरून /page-2/ वर पुनर्निर्देशित करा

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/?

]

२.९. साइट m.site.ru च्या मोबाइल आवृत्तीवर पुनर्निर्देशित करा (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|ब्लॅकबेरी ऑडिओ|एसआयई|एसईसी|सॅमसंग|एचटीसी|मोट-|मिट्सु |pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) RewriteRule ^$ http://m.%1

२.१०. सबडोमेनवरून पुनर्निर्देशित करा

उदाहरणार्थ, सबडोमेन poddomen.site.ru च्या कोणत्याही पृष्ठावरून मुख्य डोमेन site.ru वर पुनर्निर्देशित करूया

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI)

3. htaccess सह इतर उदाहरणे

३.१. IP पत्ता आणि ब्राउझर नाकारा

172.111.222.55 IP पत्त्यासह IE ब्राउझर वापरून वापरकर्त्यासाठी साइट उघडण्यास आम्ही प्रतिबंधित करू

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F]

३.२. विशिष्ट फाइल नाकारणे

चला disable_file.html फाईल प्रत्येकासाठी अक्षम करूया:

सर्वांकडून नकार द्या

३.३. एका IP वरून प्रवेशास अनुमती द्या

172.111.222.55 या एका IP पत्त्यावरून प्रवेशास अनुमती दिली जाईल

ऑर्डर नाकारणे, 172.111.222.55 पासून सर्व परवानगी नाकारण्याची परवानगी द्या

३.४. वेगवेगळ्या IP वरून प्रवेश नाकारणे

172.112.222.55, 172.113.222.55, 172.114.... अनेक IP पत्त्यांमधून साइटवर प्रवेश नाकारणे

ऑर्डर नाकारणे, 172.112.222.55 पासून 172.113.222.55 पासून सर्व नकारांना परवानगी द्या

३.५. मोठ्या वर्णांवरून लहान वर्णांवर URL पुनर्निर्देशित करा

URL मधील सर्व कॅपिटल अक्षरे लहान अक्षरांमध्ये रूपांतरित केली जातील.

RewriteRule - RewriteRule !

- पुनर्लेखन नियम ^([^A]*)A(.*) $1a$2 पुनर्लेखन नियम ^([^B]*)B(.*)$ $1b$2 पुनर्लेखन नियम ^([^C]*)C(.* )$ $1c$2 पुनर्लेखन नियम ^([^D]*)D(.*)$ $1d$2 पुनर्लेखन नियम ^([^E]*)E(.*) $1e$2 पुनर्लेखन नियम ^([^F]*) F(.*)$ $1f$2 पुनर्लेखन नियम ^([^G]*)G(.*)$ $1g$2 पुनर्लेखन नियम ^([^H]*)H(.*)$ $1h$2 पुनर्लेखन नियम ^([^) I]*)I(.*) $1i$2 पुनर्लेखन नियम ^([^J]*)J(.*)$ $1j$2 पुनर्लेखन नियम ^([^K]*)K(.*) $1k$2 पुनर्लेखन नियम ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 पुनर्लेखन नियम ^([^O]*)O(.*)$ $1o$2 पुनर्लेखन नियम ^([^P]*)P(.*)$ $1p$2 पुनर्लेखन नियम ^([^Q]*)Q( *$$1q$2 पुनर्लेखन नियम ^([^R]*)R(.*)$ $1r$2 पुनर्लेखन नियम ^([^S]*)S(.*)$ $1s$2 पुनर्लेखन नियम ^([^T] *)T(..*) [^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y $2 पुनर्लेखन नियम ^([^Z]*)Z(.*)$ $1z$2 पुनर्लेखन नियम - [N] RewriteCond %(ENV:HASCAPS) खरे पुनर्लेखन नियम ^/?(.*) /$1

RewriteRule ट्रान्सफॉर्मेशन इंजिनसाठी नियम परिभाषित करते वाक्यरचना: RewriteRule पॅटर्न प्रतिस्थापन )

(उदाहरणार्थ, RewriteRule ^tags$ /tags.php [L]

प्रतिस्थापनामध्ये, आपण खालील बांधकाम जोडून विशेष ध्वज देखील वापरू शकता:

  • RewriteRule निर्देशाचा तिसरा युक्तिवाद म्हणून. ध्वज ही ध्वजांची स्वल्पविरामाने विभक्त केलेली यादी आहे:

"पुनर्निर्देशित|R [=कोड]" (पुनर्निर्देशनास कारणीभूत ठरते)

टीप: हा ध्वज वापरताना, लुकअप फील्ड वैध URL असल्याची खात्री करा! तसे नसल्यास, तुम्ही कुठेही रीडायरेक्ट करत आहात! आणि लक्षात ठेवा की हा ध्वज स्वतःच URL ला http://thishost[:thisport]/ या स्ट्रिंगसह जोडतो आणि रूपांतरण प्रक्रिया सुरू राहते. तसेच, सहसा तुम्हाला थांबायचे असते आणि हे रीडायरेक्ट लगेच करायचे असते. रूपांतरण प्रक्रिया थांबविण्यासाठी, आपल्याला "L" ध्वज देखील लिहावा लागेल.

  • "निषिद्ध|F" (URL निषिद्ध करते)

हे वर्तमान URL प्रतिबंधित करते, उदाहरणार्थ, 403 (निषिद्ध) च्या HTTP स्थितीसह प्रतिसाद त्वरित क्लायंटला पाठविला जातो. विशिष्ट निकषांवर आधारित URL अवरोधित करण्यासाठी संबंधित RewriteConds सह संयोजनात हा ध्वज वापरा.

  • "गेले|जी" (URL "मृत" बनवते)

हा ध्वज सध्याची URL "मृत" बनवतो, म्हणजे, स्थिती 410 (GONE) सह HTTP प्रतिसाद त्वरित पाठविला जातो. यापुढे मृत म्हणून अस्तित्वात नसलेली पृष्ठे चिन्हांकित करण्यासाठी हा ध्वज वापरा.

  • "प्रॉक्सी|पी" (प्रॉक्सी कॉल करते)

हा ध्वज वाइल्डकार्ड भागाला अंतर्गत प्रॉक्सी विनंती म्हणून चिन्हांकित करतो आणि ताबडतोब (म्हणजे भाषांतर प्रक्रिया येथे थांबते) तो प्रॉक्सी मॉड्यूलमधून जातो. तुम्ही हे सुनिश्चित केले पाहिजे की वाइल्डकार्ड स्ट्रिंग वास्तविक URI आहे (उदाहरणार्थ, सामान्यत: http://hostname ने सुरू होणारी) ज्यावर Apache प्रॉक्सी मॉड्यूलद्वारे प्रक्रिया केली जाऊ शकते. असे नसल्यास, तुम्हाला प्रॉक्सी मॉड्यूलमधून एक त्रुटी प्राप्त होईल. स्थानिक सर्व्हरच्या नेमस्पेसमध्ये रिमोट सर्व्हरवरील काही सामग्री समाकलित करणाऱ्या ProxyPass निर्देशाची अधिक शक्तिशाली अंमलबजावणी करण्यासाठी हा ध्वज वापरा.

टीप: हे वापरण्यासाठी, तुमच्या Apache सर्व्हरवर कार्यरत प्रॉक्सी मॉड्यूल असल्याची खात्री करा. तुम्हाला हे माहीत नसल्यास, “httpd -l” च्या आउटपुटमध्ये mod_proxy.c लाइन आहे का ते तपासा. तसे असल्यास, या क्षमता mod_rewrite वर उपलब्ध आहेत. नसल्यास, प्रथम तुम्ही प्रॉक्सी मॉड्यूल सक्षम करून "httpd" प्रोग्राम पुन्हा तयार केला पाहिजे.

  • "अंतिम|L" (अंतिम नियम)

या टप्प्यावर रूपांतरण प्रक्रिया थांबवा आणि पुढील कोणतेही रूपांतरण नियम लागू करू नका. हे पर्लमधील शेवटच्या विधानाशी किंवा C मधील ब्रेक स्टेटमेंटशी सुसंगत आहे. त्यानंतरच्या रूपांतरण नियमांद्वारे वर्तमान URL चे रूपांतर रोखण्यासाठी हा ध्वज वापरा. उदाहरणार्थ, रूट URL ("/") वरून "/e/www/" सारख्या वास्तविक URL मध्ये रूपांतरित करण्यासाठी याचा वापर करा.

  • "पुढील|N" (पुढील फेरी)

परिवर्तन प्रक्रिया रीस्टार्ट करा (पहिल्या नियमापासून सुरू होणारी). या प्रकरणात, URL पुन्हा काही अटींशी जुळते, परंतु मूळ URL नाही, परंतु शेवटच्या भाषांतर नियमातून बाहेर आलेली URL. हे पर्लच्या पुढील विधानाशी किंवा C च्या कंटिन्यू स्टेटमेंटशी सुसंगत आहे, म्हणजे, बिनशर्त लूपच्या सुरुवातीस जाण्यासाठी हा ध्वज वापरा.

तथापि, अनंत लूप बनवू नये याची काळजी घ्या!

  • "चेन|सी" (पुढील नियमाचा दुवा)

हा ध्वज सध्याच्या नियमाला पुढच्या नियमाशी जोडतो (जो, यामधून, पुढील नियमाशी जोडला जाऊ शकतो, इ.). याचा पुढील परिणाम होतो: नियम जुळल्यास, प्रक्रिया सामान्यपणे चालू राहते, म्हणजेच ध्वजावर कोणताही परिणाम होत नाही. नियम अटीशी जुळत नसल्यास, त्यानंतरचे सर्व संबंधित नियम वगळले जातात. उदाहरणार्थ, तुम्ही बाह्य रीडायरेक्ट (जेथे ".www" नसावे!) परवानगी देता तेव्हा चालत असलेल्या निर्देशिका संदर्भ कॉन्फिगरेशन नियमातील ".www" भाग काढण्यासाठी याचा वापर करा.

  • "type|T=MIME-type" (फोर्स सेट MIME प्रकार)

लक्ष्य फाइलचा MIME प्रकार MIME प्रकारावर सेट करण्याची सक्ती करा. उदाहरणार्थ, हे mod_alias ScriptAlias ​​निर्देशाचे अनुकरण करण्यासाठी वापरले जाऊ शकते, जे डिस्प्ले निर्देशिकेतील सर्व फायलींना MIME प्रकारचा "application/x-httpd-cgi" असण्यास भाग पाडते.

  • "nosubreq|NS" (केवळ नॉन-इनर सबक्वेरीच्या बाबतीत वापरले जाते)

हा ध्वज रूपांतरण इंजिनला वर्तमान सबक्वेरी अंतर्गत सबक्वेरी असल्यास निर्देश वगळण्यास सांगतो. उदाहरणार्थ, जेव्हा mod_include डिरेक्टरी (index.xxx) साठी संभाव्य डीफॉल्ट फाइल्सबद्दल माहिती मिळवण्याचा प्रयत्न करते तेव्हा Apache मधील अंतर्गत सबक्वेरी उद्भवतात. सबक्वेरीसह, हे नेहमीच उपयुक्त नसते आणि काहीवेळा परिवर्तन निर्देशांच्या संपूर्ण संचाच्या ऑपरेशनमध्ये समस्या निर्माण करतात. काही नियम वगळण्यासाठी हा ध्वज वापरा.

तुमच्या स्वतःच्या विवेकबुद्धीनुसार खालील नियम वापरा: जेव्हा तुम्ही काही URL ला उपसर्ग लावता आणि प्रक्रियेसाठी CGI स्क्रिप्टमध्ये पास करता, तेव्हा तुम्ही सबक्वेरी वापरल्यास तुम्हाला समस्या (किंवा अनावश्यक ओव्हरहेड) होण्याची दाट शक्यता असते. या प्रकरणांमध्ये, हा ध्वज वापरा.

  • "nocase|NC" (केस संवेदनशील नाही)

हे पॅटर्न केस-संवेदनशील बनवते, म्हणजे, जेव्हा वर्तमान URL वर पॅटर्न लागू केला जातो तेव्हा "A-Z" आणि "a-z" मध्ये फरक नसतो.

  • "qsappend|QSA" (एक क्वेरी स्ट्रिंग जोडा) - क्वेरी स्ट्रिंग संलग्न करा

हा ध्वज ट्रान्सफॉर्मेशन इंजिनला URL वरून प्रतिस्थापन स्ट्रिंगमधील विद्यमान क्वेरी स्ट्रिंग बदलण्याऐवजी जोडण्याची सूचना देतो. जेव्हा तुम्ही ट्रान्सफॉर्मेशन डायरेक्टिव्ह वापरून क्वेरी स्ट्रिंगमध्ये अतिरिक्त डेटा जोडू इच्छित असाल तेव्हा हे वापरा.

learnsongs.ru वरील उदाहरण:

RewriteRule ^tags/([-A-Za-z0-9_’]+)$ /tags.php?tag=$1

RewriteRule ^tags/([-A-Za-z0-9_’]+)?page=(+)$ /tags.php?tag=$1&page=$2

  • "noescape|NE" (आउटपुट करताना URI मधून बाहेर पडू नका)

हा ध्वज mod_rewrite ला पुनर्लेखनाच्या परिणामासाठी सामान्य URI एस्केपिंग नियम लागू करण्यापासून प्रतिबंधित करतो. सामान्यतः, विशेष वर्ण (जसे की "%", "$", ";", आणि असेच) त्यांच्या हेक्साडेसिमल वाइल्डकार्डद्वारे ("%25", "%24", आणि "%3B", अनुक्रमे) सुटले जातील; हा ध्वज हे घडण्यापासून प्रतिबंधित करतो. हे आउटपुटमध्ये टक्के चिन्हे दिसण्यास अनुमती देते, जसे की

पुनर्लेखन नियम /foo/(.*) /bar?arg=P1\%3d$1

ज्यासाठी "/foo/zed" सुरक्षित क्वेरी "/bar?arg=P1=zed" मध्ये भाषांतरित करेल.

  • "पासथ्रू|पीटी" (पुढील हँडलरमधून जा)

हा ध्वज रूपांतरण इंजिनला अंतर्गत request_rec संरचनेचे uri फील्ड फाइलनाव फील्डच्या बरोबरीने सेट करण्याची सूचना देतो. RewriteRule directives, Alias, ScriptAlias, Redirect, इ. निर्देशांचे आउटपुट हाताळण्यास सक्षम होण्यासाठी हा ध्वज फक्त एक व्यवस्थित युक्ती आहे. इतर अनुवादकांकडून, URI फाइल नाव. हे शब्दार्थ दाखवण्यासाठी एक क्षुल्लक उदाहरण: जर तुम्हाला mod_rewrite रूपांतरण यंत्रणा वापरून /abc ला /def मध्ये रूपांतरित करायचे असेल आणि नंतर mod_alias वापरून /def ला /ghi मध्ये रूपांतरित करायचे असेल तर:

पुनर्लेखन नियम ^/abc(.*) /def$1

उपनाव /def /ghi

तुम्ही PT ध्वज वगळल्यास, mod_rewrite त्याचे कार्य अगदी चांगले करेल, म्हणजे, ते uri=/abc/... ला filename=/def/... मध्ये रूपांतरित करेल जसे पूर्णपणे API-अनुरूप फाइल URI अनुवादकाने केले पाहिजे. नंतर mod_alias ची पाळी येते, जो URI-filename ट्रान्झिशन करण्याचा प्रयत्न करतो जे कार्य करणार नाही.

टीप: जर तुम्हाला URL फाइलनाव अनुवादक असलेल्या वेगवेगळ्या मॉड्यूल्समधील निर्देश मिसळायचे असतील तर तुम्ही हा ध्वज वापरावा. एक सामान्य उदाहरण म्हणजे mod_alias आणि mod_rewrite मॉड्यूल्सचा वापर..

हा धडा काय स्पष्ट करतो mod_rewriteआणि ते कसे वापरावे. तीन व्यावहारिक उदाहरणे समाविष्ट आहेत: 301 पुनर्निर्देशन, अनुकूल URL तयार करणे आणि प्रतिमा दुवे अवरोधित करणे.

mod_rewrite हे एक उत्तम Apache वेब सर्व्हर मॉड्यूल आहे. हे खूप लवचिक आहे आणि अनेक उपयुक्त कार्ये करू शकते.

mod_rewrite वापरणे त्याच्या जटिल वाक्यरचना आणि प्रक्रिया यंत्रणेमुळे नवशिक्यांसाठी कठीण होऊ शकते. तथापि, एकदा आपण काही मूलभूत संकल्पना समजून घेतल्यावर, आपण आपल्या स्वतःच्या सर्व्हरसाठी mod_rewrite प्रभावीपणे वापरू शकता.

या धड्यात आपण आपल्या स्वतःच्या वेबसाइटसाठी वापरू शकता अशा वास्तविक उदाहरणांचा वापर करून अनेक मूलभूत mod_rewrite नियम कसे तयार करायचे ते शिकू. नियमित अभिव्यक्ती काय आहेत हे आपल्याला आधीच माहित नसल्यास सामग्रीचा काळजीपूर्वक अभ्यास करण्याची शिफारस केली जाते.

mod_rewrite म्हणजे काय?

mod_rewrite हे URL बदलण्यासाठी (बदलण्यासाठी) Apache सर्व्हर मॉड्यूल आहे. बऱ्याचदा याचा अर्थ अभ्यागताकडून URL विनंती घेणे आणि त्यांना वेगळ्या URL वरून सामग्री पाठवणे. उदाहरणार्थ, एखादा अभ्यागत ब्राउझरच्या ॲड्रेस बारमध्ये खालील URL टाकतो:

http://www.example.com/page.html

सामान्यतः Apache page.html फाइलमधील मजकूर वापरकर्त्याला परत पाठवते. तथापि, तुम्ही वेगळ्या URL वरून सामग्री पाठवण्यासाठी mod_rewrite वापरू शकता, जसे की:

http://www.example.com/another_page.html

हे समजून घेणे महत्त्वाचे आहे की पत्ता बदल Apache सर्व्हरमध्ये होतो. ब्राउझरचा ॲड्रेस बार अजूनही http://www.example.com/page.html दर्शवेल, परंतु Apache सर्व्हर पृष्ठाची सामग्री http://www.example.com/another_page.html पाठवेल. हे HTTP रीडायरेक्टपेक्षा वेगळे आहे, जे ब्राउझरला दुसऱ्या URL ला भेट देण्यास सांगते.

जरी mod_rewrite मॉड्यूल वापरून तुम्ही HTTP पुनर्निर्देशन आणि इतर अनेक कार्ये करू शकता, जसे की HTTP त्रुटी कोड परत करणे.

आपण mod_rewrite सह काय करू शकता

mod_rewrite मॉड्यूल तुम्हाला URL मध्ये फेरफार करण्यासाठी नियम तयार करण्यास अनुमती देते. उदाहरणार्थ, डायनॅमिक URL पुनर्निर्देशन तयार करून तुम्ही विनंती केलेल्या URL मधून मिळवलेले मूल्य नवीन URL मध्ये घालू शकता. किंवा तुम्ही सर्व्हर व्हेरिएबल्स तपासू शकता, जसे की HTTP_USER_AGENT (ब्राउझर प्रकार), आणि तुम्ही ब्राउझर वापरत असाल तरच URL बदलू शकता, जसे की सफारी iPhone वर चालत आहे.

येथे काही सामान्य कार्ये आहेत जी mod_rewrite करते:

  • "अनुकूल" URL व्युत्पन्न करा जे "अडचणी" URL मास्क करतात.उदाहरणार्थ, तुम्ही खरी URL www.example.com/display_article.php?articleId=my-article या छान दिसणाऱ्या URL सह मुखवटा लावू शकता www.example.com/articles/my-article/ . आणि प्रत्येकजण वास्तविक URL ऐवजी "अनुकूल" URL वापरण्यास सक्षम असेल.
  • तुमच्या साइटवरील इमेज लिंक्सचा वापर ब्लॉक करा.तुमच्या साइटवर होस्ट केलेल्या प्रतिमा वापरण्यापासून इतरांना थांबवण्यासाठी, संदर्भ URL तुमच्या साइटशी संबंधित नसल्यास "निषिद्ध" त्रुटी पाठवण्यासाठी तुम्ही mod_rewrite वापरू शकता.
  • कॅनॉनिकल URL पुनर्निर्देशित करत आहे.अनेक पृष्ठे एकाधिक URL द्वारे प्रवेशयोग्य आहेत—उदाहरणार्थ, www.example.com/mypage.html आणि example.com/mypage.html. www.example.com/mypage.html सारख्या "योग्य" URL वर ब्राउझरला कायमचे पुनर्निर्देशित करण्यासाठी तुम्ही mod_rewrite वापरू शकता. इतर गोष्टींबरोबरच, mod_rewrite चा वापर शोध परिणामांमध्ये योग्य URL प्रदर्शित केल्याची खात्री करतो.
  • तुमच्या साइटची पुनर्रचना करताना 404 त्रुटी काढून टाकणे.उदाहरणार्थ, तुम्ही वेबसाइट पुन्हा डिझाइन करत आहात आणि www.example.com/myarticle.html हे पृष्ठ नवीन URL www.example.com/articles/myarticle.html वर हलवले आहे. mod_rewrite सह तुम्ही www.example.com/myarticle.html हे www.example.com/articles/myarticle.html वर पुनर्निर्देशित करू शकता जेणेकरुन जुन्या URL ला भेट देताना अभ्यागताला 404 "न सापडलेली" त्रुटी आढळणार नाही. mod_rewrite च्या लवचिकतेबद्दल धन्यवाद, आपण सहजपणे एक नियम तयार करू शकता जो जुन्या URL वरील विनंत्या नवीन URL वर पुनर्निर्देशित करेल.

mod_rewrite कसे वापरावे

mod_rewrite वापरण्यासाठी, तुम्हाला मॉड्यूलला काय करावे हे सांगण्यासाठी Apache निर्देश तयार करावे लागतील. निर्देश साध्या कॉन्फिगरेशन सेटिंग्ज आहेत. अनेकदा निर्देश तुमच्या वेबसाइटच्या रूट फोल्डरमध्ये .htaccess फाइलमध्ये ठेवलेले असतात. निर्देश संपूर्ण साइटवर लागू होतात.

दोन सर्वात महत्वाचे mod_rewrite निर्देश आहेत:

  • RewriteEngine: सध्याच्या विनंतीसाठी mod_rewrite यंत्रणा सक्षम/अक्षम करते.
  • पुनर्लेखन नियम: URL बदलण्याच्या नियमाचे वर्णन करते.

येथे एक साधे उदाहरण आहे. खालील सामग्रीसह .htaccess फाइल तयार करा आणि ती तुमच्या साइटवर ठेवा:

RewriteRule ^dummy\.html$ http://www.google.com/ वर RewriteEngine

ही फाइल खालील सेटिंग्ज निर्दिष्ट करते:

  • RewriteRule ^dummy\.html$ http://www.google.com/ - 301 पुनर्निर्देशन वापरून Google वेबसाइटवर dummy.html पृष्ठावर विनंत्या पुनर्निर्देशित करा.

जर तुम्ही आता तुमचा वेब ब्राउझर उघडला आणि तुमच्या साइटवरील dummy.html पेजला भेट दिली (उदाहरणार्थ, ॲड्रेस बारमध्ये http://www.example.com/dummy.html प्रविष्ट करून), तर, सर्वकाही त्रुटींशिवाय केले असल्यास , तुम्हाला http://www.google.com साइटवर पुनर्निर्देशित केले जाईल.

तुम्हाला 404 एरर मिळाल्यास, तुमचे होस्टिंग कदाचित mod_rewrite वापरत नाही. या प्रकरणात, आपल्याला आपल्या होस्टिंग प्रशासकाशी संपर्क साधण्याची आवश्यकता आहे.

RewriteRule कसे कार्य करते

पुनर्निर्देशन नियम तयार करण्यासाठी तुम्ही RewriteRule निर्देश वापरू शकता. निर्देशांचे सामान्य वाक्यरचना आहे:

RewriteRule पॅटर्न प्रतिस्थापन

  • नमुना- नियमित अभिव्यक्ती नमुना. URL पॅटर्नशी जुळत असल्यास, नियम अंमलात आणला जातो. अन्यथा नियम वगळला जातो.
  • प्रतिस्थापन- टेम्पलेटशी संबंधित पत्त्याऐवजी एक नवीन URL वापरली जाईल.
  • - नियमाचे वर्तन निर्धारित करणारे एक किंवा अधिक ध्वज.

तुम्ही तुमच्या .htaccess फाइलमध्ये आवश्यक तेवढे RewriteRules जोडू शकता. mod_rewrite मॉड्यूल प्रत्येक वेळी विनंती केल्यावर, संबंधित URL वर प्रक्रिया करून सर्व नियमांचे पालन करते.

जर एखाद्या नियमाने विनंती केलेली URL नवीन पत्त्यावर बदलली, तर नवीन URL पुढे .htaccess फाईलचा मार्गक्रमण करताना वापरली जाते आणि ती फाईलमधील आणखी एका RewriteRule शी जुळू शकते. (तुम्हाला हे वर्तन बदलायचे असल्यास, तुम्हाला L ध्वज ("अंतिम नियम") वापरण्याची आवश्यकता आहे.)

mod_rewrite वापरण्याची काही उदाहरणे

mod_rewrite समजावून सांगण्याचा सर्वात सोपा मार्ग म्हणजे व्यावहारिक समस्या सोडवण्यासाठी त्याचा वापर दर्शवणे.

उदाहरण 1: 404 त्रुटी अपवाद

कधीकधी तुमच्या साइटवरील पृष्ठाची URL बदलते. जेव्हा सामग्री पुनर्रचना केली जाते तेव्हा हे होऊ शकते. शोध इंजिन किंवा इतर साइट जुन्या URL ला लिंक करत असल्यास, वापरकर्त्याने लिंक वापरण्याचा प्रयत्न केल्यावर त्यांना "404 नॉट फाउंड" त्रुटी प्राप्त होईल.

या समस्येचे निराकरण करण्यासाठी, तुम्ही 301 रीडायरेक्ट करण्यासाठी mod_rewrite मॉड्यूल वापरू शकता हे जुन्या URL ची विनंती करणाऱ्या कोणत्याही ब्राउझरला HTTP शीर्षलेख पाठवते आणि त्यांना हे सांगते की पृष्ठ नवीन पत्त्यावर हलवले आहे. हे शोध इंजिनांना त्यांचे अनुक्रमणिका नवीन URL सह अद्यतनित करण्यास देखील सांगते.

खालील .htaccess फाइल नवीन URL वर विनंत्या पुनर्निर्देशित करेल:

RewriteRule ^my-old-url\.html$ /my-new-url.html वर RewriteEngine

RewriteRule असे कार्य करते:

  • ^my-old-url\.html$ ही एक नियमित अभिव्यक्ती आहे जी बदलण्यासाठी URL शी जुळते. पॅटर्नचा अर्थ आहे: "URL च्या सुरूवातीस (^) जुळते, त्यानंतर "my-old-url.html" मजकूर त्यानंतर URL वर्ण ($) च्या शेवटी येतो." रेग्युलर एक्स्प्रेशनमध्ये, डॉट (.) वर्ण कोणत्याही वर्णाशी जुळतो, म्हणून आम्ही डॉट (\.) शोधत आहोत हे दर्शविण्यासाठी आम्हाला बॅकस्लॅश वापरण्याची आवश्यकता आहे.
  • /my-new-url.html - RewriteRule चा दुसरा भाग, जे बदलणे आवश्यक आहे त्याचे वर्णन करते. या प्रकरणात ते फक्त /my-new-url.html आहे.
  • नियमाचा तिसरा भाग, ज्यामध्ये चौरस कंसात ठेवलेले एक किंवा अधिक ध्वज असतात. ध्वज तुम्हाला नियमात विशिष्ट पर्याय किंवा क्रिया जोडण्याची परवानगी देतात. हे उदाहरण 2 ध्वज वापरते: R=301 म्हणजे “वापर 301 नवीन URL वर पुनर्निर्देशित करा”; आणि L म्हणजे "अंतिम नियम" किंवा दुसऱ्या शब्दांत "URL वर प्रक्रिया करणे थांबवा जर ते नियमाशी जुळत असेल तर".

उदाहरण 2: अनुकूल URL तयार करणे

समजा तुम्ही तुमच्या वेबसाइटवर लेख प्रदर्शित करण्यासाठी PHP स्क्रिप्ट display_article.php लिहिली आहे. तुम्ही खालील URL वापरून लेखाशी दुवा जोडू शकता:

http://www.example.com/display_article.php?articleId=my-article

हा पत्ता कुरूप दिसतो आणि त्यातील क्वेरी (?articleId=my-article) काही शोध इंजिनांना गोंधळात टाकू शकते. यासारखे URL वापरणे अधिक चांगले आहे:

http://www.example.com/articles/my-article/

तुम्ही mod_rewrite चा वापर पहिल्या फॉरमॅटचे दुवे दुसऱ्यामध्ये रूपांतरित करण्यासाठी करू शकता, ज्यामुळे साइटच्या पानांवर अनुकूल दुवे वापरणे शक्य होईल आणि कोणालाही न दिसणाऱ्या खऱ्या पत्त्यांवर प्रवेश केला जाईल. हे करण्यासाठी, तुमच्या साइटच्या रूट निर्देशिकेत असलेल्या .htaccess फाइलमध्ये खालील ओळी असणे आवश्यक आहे:

RewriteRule ^articles/([^/]+)/?$ display_article.php?articleId=$1 [L] वर RewriteEngine

पुनर्लेखन नियमाचे वर्णन:

  • ^लेख/([^/]+)/?$ ही एक नियमित अभिव्यक्ती आहे जी लेखांच्या स्वरूपातील कोणत्याही URL शी जुळते/(लेख आयडी)/ . त्यात असे लिहिले आहे: "URL च्या सुरूवातीस (^) त्यानंतर मजकूर लेख/ , त्यानंतर एक किंवा अधिक नॉन-स्लॅश वर्ण ([^/]+) , त्यानंतर स्लॅश (/?) , त्यानंतर जुळते. URL शेवटच्या वर्णानुसार ($) ". पॅटर्नच्या [^/]+ भागाभोवतीचे कंस लक्षात ठेवा. अशा प्रकारे, दिलेल्या भागाशी संबंधित मजकूर, उदाहरणार्थ, "माय-लेख" , नंतरच्या वापरासाठी जतन केला जातो.
  • display_article.php?articleId=$1 - नियमाचा हा भाग Apache सर्व्हरला display_article.php स्क्रिप्ट वापरण्यास सांगतो, जो रेग्युलर एक्स्प्रेशनच्या पहिल्या भागातून [^/]+ सबपॅटर्नशी जुळणारा मजकूर पास केला जातो (उदाहरणार्थ, "my-article") लेख आयडी पॅरामीटर म्हणून. $1 म्हणतात अभिप्रायआणि सबटेम्प्लेटशी संबंधित मजकूर संग्रहित करते. जर रेग्युलर एक्सप्रेशनमध्ये कंसात दुसरा सबपॅटर्न असेल, तर संबंधित मजकूर $2 व्हेरिएबलमध्ये संग्रहित केला जाईल आणि असेच.
  • [L] - मागील उदाहरणाप्रमाणे, आम्ही URL ची पुढील प्रक्रिया थांबवण्यासाठी ध्वज वापरतो जेणेकरून पत्ता इतर RewriteRules द्वारे बदलू नये.

वरील RewriteRule विनंती केलेली URL http://www.example.com/articles/my-article/ या स्वरूपात घेते आणि http://www.example.com/display_article.php?articleId=my सारख्या URL मध्ये रूपांतरित करते. - लेख.

उदाहरण 3: तुमच्या साइटवरील इमेज लिंक्स प्रतिबंधित करणे

mod_rewrite मॉड्यूल सोडवणारे आणखी एक वैशिष्ट्यपूर्ण कार्य म्हणजे इतर वेब प्रकल्पांना तुमच्या साइटवरील प्रतिमांच्या लिंक्स वापरण्यापासून प्रतिबंधित करणे. समजा तुमच्या साइटवर तुमच्या http://www.example.com/mypage.html वर एक पृष्ठ आहे ज्यामध्ये खालील img टॅग आहे:

दुसरी साइट तिच्या पृष्ठांवर आपल्या फोटोशी थेट लिंक करू शकते:

याचा अर्थ असा आहे की दुसऱ्याची साइट केवळ तुमची प्रतिमा "उधार" घेत नाही, परंतु त्यांच्या पृष्ठांवर प्रतिमा प्रदर्शित करण्यासाठी तुमची काही सर्व्हर रहदारी वापरते. आणि जर एखाद्याच्या साइटवर अभ्यागतांचा मोठा प्रवाह असेल तर ही परिस्थिती एक समस्या बनेल!

तुमच्या स्वत:च्या स्वत:च्या व्यतिरिक्त इतर सर्व साइटना इमेज लिंक वापरण्यापासून थांबवण्यासाठी तुम्ही खालील mod_rewrite निर्देश वापरू शकता. खालील कोड तुमच्या साइटच्या रूट डिरेक्टरीमधील .htaccess फाइलमध्ये किंवा तुम्हाला संरक्षित करायच्या असलेल्या प्रतिमा असलेल्या फोल्डरमध्ये ठेवा. example.com ला तुमच्या डोमेन नावात बदला.

RewriteEngine वर RewriteCond %(HTTP_REFERER) !^$ RewriteCond %(HTTP_REFERER) !^http://(www\.)?example\.com/.*$ RewriteRule .+\.(gif|jpg|png)$ - [ फ]

तुम्ही सर्व कॉपी ऑपरेशन पूर्ण केल्यावर, www.example.com किंवा example.com व्यतिरिक्त डोमेन नावाने सुरू होणारी URL वापरून तुमच्या साइटवरून प्रतिमांची विनंती करणाऱ्या कोणत्याही ब्राउझरला "403 निषिद्ध" त्रुटी प्राप्त होईल. जे इतर साइटवरील तुमच्या इमेजच्या लिंक्स थांबवेल.

नियमांचा हा संच कसा कार्य करतो ते येथे आहे:

  • RewriteEngine चालू - mod_rewrite यंत्रणा सक्षम करा
  • RewriteCond %(HTTP_REFERER) !^$ - RewriteCond हे आणखी एक mod_rewrite निर्देश आहे. हे तुम्हाला URL वर प्रक्रिया करण्यासाठी खालील RewriteRule साठी पूर्ण करणे आवश्यक असलेली अट सेट करण्याची परवानगी देते. या प्रकरणात, स्थिती HTTP_REFERER व्हेरिएबलमधील मूल्याची उपस्थिती आहे.
  • RewriteCond %(HTTP_REFERER) !^http://(www\.)?example\.com/.*$ - दुसऱ्या RewriteCond निर्देशानुसार HTTP_REFERER व्हेरिएबलचे मूल्य http://www.example.com ने सुरू होत नाही. / किंवा http://example.com/. ध्वज केस संवेदनशीलता सेट करतो.
  • RewriteRule .+\.(gif|jpg|png)$ - [F] - जर वरील दोन मागील RewriteCond अटी पूर्ण झाल्या नाहीत, तर नियम वगळला जाईल. जर URL मध्ये इमेज फाइलचे नाव असेल तर नियम स्वतः "403 निषिद्ध" ([F] ध्वज वापरला आहे) त्रुटी देतो (ओळ .gif , .jpg किंवा .png ने समाप्त होते). URL दुसऱ्या पत्त्याने बदलू नका" .

म्हणजेच, .htaccess फाइलमधील नियमांचा संपूर्ण संच असे सांगतो की जर HTTP_REFERER व्हेरिएबलमध्ये मूल्य असेल आणि ते http://example.com/ किंवा http://www.example.com/ ने सुरू होत नसेल तर विनंती केलेल्या URL मध्ये इमेज फाइलचे नाव आहे, नंतर तुम्हाला "403 निषिद्ध" त्रुटीसह विनंती नाकारण्याची आवश्यकता आहे.

निष्कर्ष

या ट्युटोरियलमध्ये, आम्ही URL मध्ये फेरफार करण्यासाठी Apache mod_rewrite सर्व्हर मॉड्यूल वापरण्याचा परिचय दिला आहे. चर्चा केलेल्या तीन व्यावहारिक उदाहरणांमध्ये मॉड्यूलच्या सर्व क्षमतांचा फक्त एक छोटासा भाग समाविष्ट आहे. रशियन भाषेत मोड-रीराइटबद्दल अधिक तपशीलवार माहिती मिळू शकते.

htaccess. RewriteRule: साधे, स्पष्ट, उदाहरणे आणि स्पष्टीकरणांसह
आम्ही, वेब प्रोग्रामर म्हणून, अनेकदा फाईलमध्ये येतो .htaccessआणि विशेषतः त्याच्या MOD_REWRITE मॉड्यूल आणि वाक्यरचनासह पुनर्लेखन नियम. आणि सुरुवातीला त्याच्या ऑपरेशनचे तत्त्व, ते ज्या नियमांद्वारे कार्य करते आणि डायनॅमिक लिंक्सला स्थिर लिंक्समध्ये रूपांतरित करण्याची यंत्रणा आणि त्याउलट समजून घेणे आणि समजून घेणे कठीण आहे. या लेखात मी ते शक्य तितक्या सोप्या पद्धतीने, शक्य तितक्या प्रवेशयोग्य, स्पष्टीकरणे आणि उदाहरणांसह स्पष्ट करण्याचा प्रयत्न करेन जेणेकरून आपल्याकडे कोणतेही प्रश्न शिल्लक राहणार नाहीत.
सिंटॅक्ससह mod_rewrite मॉड्यूल डायनॅमिक लिंक्सला स्थिर लिंक्समध्ये रूपांतरित करण्यासाठी जबाबदार आहे पुनर्लेखन नियम, ऑपरेटिंग तत्त्व आणि परिवर्तन नियम, जे मी स्पष्ट करेन.
उदाहरणार्थ, एक डायनॅमिक लिंक घेऊ ज्याची आपल्याला रूपांतरित करायची आहे:

या दुव्यामध्ये आम्ही आमच्या साइटवर उत्तीर्ण केलेल्या पॅरामीटर्सची जास्तीत जास्त संभाव्य संख्या समाविष्ट केली आहे.
म्हणजेच, कॅटलॉगमध्ये आम्ही बीएमडब्ल्यू कार, मॉडेल X5, कंडिशन – नवीन, पृष्ठ 5 निवडले.

फाईलमध्ये .htaccess, जे आपण कॅटलॉग/ निर्देशिकेच्या रूट फोल्डरमध्ये ठेवू, लिहा (फाइल .htaccessफक्त ती जिथे आहे त्या निर्देशिकेवर आणि तिच्या चाइल्ड डिरेक्ट्रीवर परिणाम करते):
RewriteEngine चालू(आम्ही दुवा रूपांतरण प्रक्रिया चालू करतो)
पुनर्लेखन नियम ^(+)/([^/]+)/(.*)/(+).html$ index.php?auto=$1&model=$2&state=$3&page=$4 [L]

येथे काय लिहिले आहे ते जवळून पाहूया:
^ ओळीची सुरुवात;
(+) कंस एक व्हेरिएबल तयार करतात, ज्याला आपण डायनॅमिक लिंक $1 मध्ये बदलतो. म्हणजे
चल $1 = ([ अ-Za-z0-9-]+)
चल $2 = ([^/]+)
चल $3 = (.*)
चल $4 = (+)
कंसात [ अ-Za-z0-9-]वैध वर्णांचा वर्ग. या प्रकरणात, वैध वर्ण आहेत A B C D…Z a b c…z 0 1 2 3…9 –सारखी अक्षरे जोडायची असतील तर ? ; : मग आम्हाला खालील गोष्टी मिळतात म्हणजे, त्यांनी त्यांना फक्त जोडले.
+ म्हणजे आम्ही दुसरे वाइल्डकार्ड वर्ण जोडत आहोत.
अभिव्यक्ती ([^/]+) म्हणजे बॅकस्लॅश वगळता (^ म्हणजे वगळता) कोणतेही वर्ण. + म्हणजे दुसरे वर्ण जोडा.
अभिव्यक्ती (.*) बिंदू म्हणजे कोणताही एक वर्ण, * म्हणजे प्लस सारखाच - दुसरा वर्ण जोडा.
अभिव्यक्ती (+) मला वाटते की हे स्पष्ट आहे.
.html– म्हणजे स्टॅटिक स्ट्रिंग .html ने संपते
स्लॅश / स्थिर दुव्यामध्ये म्हणजे स्लॅश.

हे लक्षात घ्यावे की हा मोड दुवे डायनॅमिक ते स्थिर दुव्यांमध्ये रूपांतरित करत नाही, परंतु VERSE VICE! म्हणजेच, आम्ही साइटवर स्थिर दुवे लिहितो आणि पुनर्लेखन मोड साइटवरील स्थिर दुव्याला डायनॅमिकमध्ये रूपांतरित करतो. म्हणजेच, आम्ही साइटवर वरील लिंक स्थिर म्हणून लिहिली पाहिजे:
site.ru/catalog/BMW/X5/NEW/5.html
RewriteRule मॉड्यूलमध्ये लिहिलेल्या नियमानुसार या लिंकला डायनॅमिकमध्ये रूपांतरित करते .htaccessआणि साइट देते:

आउटपुट एक दुवा आहे: site.ru/catalog/index.php?auto=BMW&model=X5&state=NEW&page=5
जे आमच्यासाठी स्पष्ट आहे phpस्क्रिप्ट आणि वेबसाइट पृष्ठे.
तसेच, वर नमूद केलेल्या परिवर्तन नियमामध्ये, तुम्ही पेज नंबर व्हेरिएबलशिवाय लिंकसाठी नियम, तसेच व्हेरिएबल्सच्या अनुपस्थितीत संभाव्य पर्याय जोडले पाहिजेत.
पुनर्लेखन नियम ^(+)/([^/]+)/(.*).html$ index.php?auto=$1&model=$2&state=$3 [L]
RewriteRule ^(+)/([^/]+).html$ index.php?auto=$1&model=$2 [L]
RewriteRule ^(+).html$ index.php?auto=$1 [L]
खाली MOD_REWRITE मॉड्यूलमध्ये वापरलेले संभाव्य संकेत आणि चिन्हे आहेत:
. कोणतेही एकल वर्ण. जर आपल्याला कंसात एक बिंदू हवा असेल आणि कोणत्याही एका वर्णाची गरज नसेल, तर ते सुटणे आवश्यक आहे. बॅकस्लॅश कोणत्याही वर्ण () सुटतो का? > इ. आणि त्याचा खरा अर्थ सांगते.
वर्ण वर्ग: वर्णांपैकी एक, उदाहरणार्थ (2,5) - कुरळे ब्रेसेस वर्णांच्या संख्येची श्रेणी दर्शवतात, या प्रकरणात 2 ते 5 वर्णांना परवानगी आहे.
[^अक्षर] वर्ण वर्ग: कोणतेही पात्र नाही. [^fg57] – f g 5 7 ही चिन्हे प्रतिबंधित आहेत.
मजकूर1|मजकूर2पर्यायी: text1 किंवा text2. उदाहरणार्थ a किंवा b किंवा c
क्वांटिफायर (परिमाणवाचक संबंध दर्शविणारी चिन्हे):
? मागील मजकुरातून 0 किंवा 1याचा अर्थ एकतर चिन्ह आहे किंवा चिन्हांचा काही अर्थ आहे किंवा असू शकत नाही.
* 0 किंवा N मागील मजकुरातून (N > 0)
मागील मजकुरातील + 1 किंवा N (N > 1)
मॅक्रो " $1 " स्त्रोत मार्गाचा तो भाग दर्शवितो जो कंसाच्या पहिल्या जोडीमध्ये स्थित आहे "RewriteRule ^(*......" , $2 - दुसऱ्या जोडीच्या आत आणि असेच.
मार्कर:
^ लाइन मार्करची सुरुवात
$ ओळ मार्करचा शेवट

स्पष्टीकरणासह उदाहरण RewriteRule:
समजा आमच्या वेबसाइटवर डायनॅमिक पृष्ठे असलेले लेख आहेत:
http://www.site.ru/articles?id=(लेख आयडी)
चला आमच्या लेखांची लिंक अधिक सुंदर बनवूया, उदाहरणार्थ:
http://www.site.ru/nazvanie-stati/ किंवा
http://www.site.ru/nazvanie-stati.html
हे करण्यासाठी, आमच्या MySQL टेबलमध्ये, आम्ही एक अतिरिक्त ओळ जोडतो ज्यामध्ये आम्ही लेखाचे अनन्य शीर्षक लॅटिन अक्षरांमध्ये स्पेस, स्लॅश आणि लिंक्समध्ये परवानगी नसलेल्या विशेष वर्णांशिवाय संग्रहित करू. उदाहरणार्थ: मोया-पर्वया-स्तत्य आणि या तत्त्वानुसार. आपल्या टेबलमधील पंक्तीला नाव देऊ, उदाहरणार्थ eng_name_stati
डायनॅमिक लिंक आता यासारखे दिसेल:
http://www.site.ru/articles?eng_name_stati=(Moya-pervaya-statya, इ.)
समजून घेण्याचा मुख्य मुद्दा म्हणजे फाइल .htaccessमी वर म्हटल्याप्रमाणे , डायनॅमिक लिंक्सला स्थिर लिंक्समध्ये रूपांतरित करत नाही, परंतु त्याउलट, स्टॅटिक लिंक्सचे डायनॅमिकमध्ये रूपांतरित करते.
परिवर्तन नियम पुनर्लेखन नियमअसे दिसेल:
पुनर्लेखन नियम ^(.*)/$ लेख?eng_name_stati=$1 [L]स्टॅटिक लिंक प्रकारासाठी: http://www.site.ru/nazvanie-stati/किंवा
पुनर्लेखन नियम ^(.*).html$ लेख?eng_name_stati=$1 [L]देखावा फायद्यासाठी
आता लिंक टाकल्यावर http://www.site.ru/nazvanie-stati.htmlब्राउझरमध्ये, आम्हाला आमच्या लेखात नेले जाईल http://www.site.ru/articles?eng_name_stati=nazvanie-statiआणि हे दोन्ही दुवे कार्य करतील. आमच्या वेबसाइटवर आम्ही शोध इंजिनसाठी फक्त स्थिर दुवे प्रदान करतो. आणि जेव्हा लोक स्थिर दुव्याला भेट देतात तेव्हा आमची फाईल .htaccessआमच्या साइटसाठी समजण्यायोग्य आणि केवळ त्यास दृश्यमान, डायनॅमिकमध्ये रूपांतरित करते.

जोडणे:

असे होते की आम्हाला प्रथम आमच्या सर्व्हरवरील विद्यमान फाइलची लिंक आहे की नाही हे तपासणे आवश्यक आहे, उदाहरणार्थ /catalog/webmaster/index.htmlअस्तित्वात असलेली फाईल असू शकते, परंतु जर ही लिंक संबंधित RewriteRule अंतर्गत येते, तर ती या नियमानुसार रूपांतरित केली जाईल. म्हणून, जर आपल्याला प्रथम ही फाइल किंवा निर्देशिका थेट आहे की नाही हे तपासायचे असेल तर, आपल्याला RewriteRule नियमापूर्वी एक अट लिहावी लागेल. जर:

असे कोणतेही फोल्डर नसल्यास
अशी कोणतीही फाईल नसल्यास
रूपांतरण करा

हे असे दिसेल:

RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f
RewriteRule ^([^/]+)/([^/]+)/([^/]+).html$ index.php?catalog=$1&webmaster=$2&file=$3 [L]

कुठे, RewriteCond- स्थिती जर, %(REQUEST_FILENAME)- विनंती केलेल्या फाइल किंवा निर्देशिकेचा संपूर्ण सिस्टम मार्ग, उद्गार चिन्ह ! नकार म्हणजे नाही, -डी- निर्देशिका, -f- फाइल.

आता, RewriteRule लागू करण्यापूर्वी, RewriteCond स्थिती तपासली जाईल

आपण अद्याप टिप्पणी का केली नाही?
तुझे सोडा



आम्ही वाचण्याची शिफारस करतो

वर