بازنويسي URL را با mod_rewrite براي Apache در Debian 10

۷۴ بازديد

ماژول mod_rewrite در Apache به شما امكان مي دهد URL ها را با روشي تميزتر بازنويسي كنيد ، مسيرهاي قابل خواندن توسط انسان را به رشته هاي جستار سازگار با كد تبديل كنيد. همچنين به شما امكان مي دهد URL ها را بر اساس شرايط بازنويسي كنيد.
فايل .htaccess به شما امكان مي دهد بدون دسترسي به فايلهاي پيكربندي سرور مجازي ، قوانين بازنويسي را ايجاد و اعمال كنيد. با قرار دادن فايل .htaccess در ريشه وب سايت خود ، مي توانيد بازنويسي ها را بر اساس هر سايت يا هر دايركتوري مديريت كنيد.
در اين آموزش ، شما مي توانيد mod_rewrite را فعال كرده و از فايلهاي .htaccess براي ايجاد يك تغيير مسير URL اصلي استفاده كنيد و سپس چند مورد استفاده پيشرفته را جستجو كنيد.
پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
يك سرور مجازي Debian 10 با دنبال كردن راهنماي ستاپ اوليه سرور مجازي Debian 10 تنظيم شده باشد، و شامل كاربر sudo غير ريشه و يك فايروال باشد.
Apache كه طبق مراحل 1 و 2 نحوه نصب وب سرور مجازي Apache در Debian 10 نصب شده باشد.

مرحله 1 – فعال كردن mod_rewrite
براي اينكه Apache بتواند قوانين بازنويسي را درك كند ، ابتدا بايد mod_rewrite را فعال كنيم. قبلاً نصب شده است ، اما در نصب پيش فرض Apache غيرفعال است. براي فعال كردن ماژول از دستور a2enmod استفاده كنيد:
$ sudo a2enmod rewrite

با اين كار ماژول فعال مي شود يا به شما هشدار مي دهد كه ماژول از قبل فعال شده است. براي اجراي اين تغييرات ، Apache را مجدداً راه اندازي كنيد:
$ sudo systemctl restart apache2

اكنون mod_rewrite كاملاً فعال است. در مرحله بعدي يك فايل .htaccess را براي تعريف قوانين بازنويسي براي تغيير مسيرها تنظيم خواهيم كرد.
مرحله 2 – تنظيم .htaccess
فايل .htaccess به ما امكان مي دهد قوانين بازنويسي خود را بدون دسترسي به فايل هاي پيكربندي سرور مجازي اصلاح كنيم. به همين دليل ، .htaccess براي امنيت برنامه وب شما بسيار مهم است. زماني كه پيش از نام فايل وجود دارد، اطمينان مي دهد كه فايل پنهان شده است.

توجه: هر قانوني كه بتوانيد در يك فايل .htaccess قرار دهيد ، مي تواند مستقيماً در فايل هاي پيكربندي سرور مجازي قرار گيرد. در حقيقت ، مطالب رسمي Apache توصيه مي كند از فايل هاي پيكربندي سرور مجازي به جاي .htaccess به دليل زمان پردازش سريعتر استفاده كنيد.
با اين حال ، در اين مثال ساده ، افزايش عملكرد ناچيز خواهد بود. علاوه بر اين ، تنظيم قوانين در .htaccess راحت است ، به خصوص با چندين وب سايت در همان سرور مجازي. نيازي به راه اندازي مجدد سرور مجازي براي ايجاد تغييرات يا اعمال امتيازات اصلي براي ويرايش قوانين ، ساده سازي نگهداري و روند ايجاد تغييرات با يك حساب بدون امتياز نيست. نرم افزارهاي منبع باز محبوب مانند WordPress و Joomla براي ايجاد تغييرات و قوانين اضافي در صورت تقاضا به فايلهاي .htaccess متكي هستند.
قبل از شروع استفاده از فايل هاي .htaccess ، بايد تنظيمات ديگري را تنظيم و ايمن كنيد.
به طور پيش فرض ، Apache با استفاده از فايل .htaccess اعمال قوانين بازنويسي را ممنوع مي كند ، بنابراين ابتدا بايد تغييراتي در فايل اعمال كنيد. فايل پيش فرض پيكربندي Apache را با استفاده از nano يا ويرايشگر متن مورد علاقه خود باز كنيد:
$ sudo nano /etc/apache2/sites-available/000-default.conf

در داخل آن فايل ، بلوك را كه از خط اول شروع مي شود ، پيدا خواهيد كرد. در داخل آن بلوك ، بلوك جديد زير را اضافه كنيد تا فايل پيكربندي شما مانند زير شود. مطمئن شويد كه همه بلوك ها به درستي قرار گرفته اند:
/etc/apache2/sites-available/000-default.conf


Options Indexes FollowSymLinks
AllowOverride All
Require all granted

. . .

فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده كرده ايد ، اين كار را با فشار دادن CTRL + X ، Y ، سپس enter انجام دهيد.
سپس ، پيكربندي خود را بررسي كنيد:
$ sudo apache2ctl configtest

اگر خطايي وجود ندارد ، Apache را مجدداً راه اندازي كنيد تا تغييرات خود را به مرحله اجرا برسانيد:
$ sudo systemctl restart apache2

اكنون ، يك فايل .htaccess را در ريشه وب ايجاد كنيد:
$ sudo nano /var/www/html/.htaccess

اين خط را در بالاي فايل جديد اضافه كنيد تا موتور بازنويسي فعال شود.
var/www/html/.htaccess
RewriteEngine on

فايل را ذخيره كرده و خارج شويد.
اكنون يك فايل .htaccess عملياتي داريد كه مي توانيد از آن استفاده كنيد تا قوانين مسيريابي برنامه وب خود را كنترل كنيد. در مرحله بعد ، يك فايل وب سايت نمونه را ايجاد خواهيم كرد كه براي نشان دادن قوانين بازنويسي استفاده خواهيم كرد.
مرحله 3 – پيكربندي بازنويسي URL
در اينجا ، يك بازنويسي URL پايه را تنظيم مي كنيم كه URL هاي زيبا را به مسيرهاي واقعي به صفحات تبديل مي كند. به طور خاص ، ما به كاربران اين امكان را مي دهيم كه به http: // your_server_ip / about دسترسي پيدا كنند و صفحه اي به نام about.html را به نمايش بگذارند.
با ايجاد فايلي با نام about.html در ريشه وب شروع كنيد:
$ sudo nano /var/www/html/about.html

كد HTML زير را در فايل كپي كنيد ، سپس آن را ذخيره كرده و ببنديد.
/var/www/html/about.html


About Us


About Us



شما مي توانيد به اين صفحه به آدرس http: //your_server_ip/about.html دسترسي پيدا كنيد ، اما توجه داشته باشيد كه اگر سعي كنيد به http: // your_server_ip / About دسترسي پيدا كنيد ، خطاي 404 Not Found  را مشاهده خواهيد كرد. در عوض براي دسترسي به صفحه با استفاده از /about، يك قانون بازنويسي ايجاد خواهيم كرد.
همه RewriteRules از اين قالب پيروي مي كنند:
General RewriteRule structure
RewriteRule pattern substitution [flags]

RewriteRule دستورالعمل را مشخص مي كند
patternيك عبارت معمولي است كه رشته مورد نظر را از URL مطابقت مي دهد ، همان چيزي است كه بيننده در مرورگر تايپ مي كند.
substitution مسير URL واقعي است ، يعني مسير فايلي كه Apache ارائه مي كند.
flags پارامترهاي اختياري هستند كه مي توانند نحوه عملكرد قانون را تغيير دهند.
بياييد قانون بازنويسي URL را ايجاد كنيم. فايل .htaccess را باز كنيد:
$ sudo nano /var/www/html/.htaccess

بعد از اولين خط ، RewriteRule زير را اضافه كنيد و فايل را ذخيره كنيد:
/var/www/html/.htaccess
RewriteEngine on
RewriteRule ^about$ about.html [NC]

در اين حالت ، ^about$ الگو است ، about.html جايگزين است ، و [NC] يك پرچم است. مثال ما از چند كاراكتر با معني خاص استفاده مي كند:
^ شروع URL را نشان مي دهد ، بعد از your_server_ip /.
$ نشانگر پايان URL است.
about با رشته “درباره” منطبق ميشود
About.html فايل واقعي است كه كاربر به آن دسترسي پيدا مي كند.
[NC] يك پرچم است كه قانون را نسبت به نمونه غير حساس مي كند.
اكنون مي توانيد به مرورگر خود به http: // your_server_ip / about دسترسي پيدا كنيد. در حقيقت ، با اين قانون كه در بالا نشان داده شده است ، آدرس هاي اينترنتي زير به about.html نيز اشاره مي كنند:
http: // your_server_ip / about ، به دليل تعريف قانون.
http: // your_server_ip / About ، چون اين قانون حساسيتي ندارد.
http: //your_server_ip/about.html ، زيرا نام اصلي فايل هميشه كار خواهد كرد.
با اين حال ، موارد زير كار نخواهد كرد:
http: // your_server_ip / about / ، زيرا اين قانون به صراحت بيان مي كند كه ممكن است هيچ چيز ديگري بعد از about وجود نداشته باشد ، زيرا كاراكتر $ بعد از آن ظاهر مي شود.
http: // your_server_ip / contact ، زيرا با رشته about در قانون مطابقت ندارد.
اكنون يك فايل .htaccess عملياتي با يك قانون پايه داريد كه مي توانيد نيازهاي خود را تغيير داده و گسترش دهيد. در بخش هاي بعدي ، دو نمونه ديگر از دستورالعمل هاي متداول را نشان خواهيم داد.
مثال 1 – ساده سازي رشته هاي پرس و جو با RewriteRule
برنامه هاي وب اغلب از رشته هاي پرس و جو استفاده مي كنند ، كه با استفاده از علامت سؤال (؟) بعد از آدرس به URL اضافه مي شوند. پارامترهاي جداگانه با استفاده از ampersand (&) محدود مي شوند. رشته هاي پرس و جو ممكن است براي انتقال داده هاي اضافي بين صفحات برنامه فردي استفاده شود.
به عنوان مثال ، يك صفحه نتيجه جستجو كه به زبان PHP نوشته شده است ، مي تواند از URL مانند http://example.com/results.php?item=shirt&season=summer استفاده كند. در اين مثال ، دو پارامتر اضافي به اسكريپت نرم افزار result.php موهومي منتقل مي شود: item ، با مقدار shirt ، و season با مقدار summer. برنامه ممكن است از اطلاعات رشته پرس و جو براي ايجاد صفحه مناسب براي بازديد كننده استفاده كند.
قوانين بازنويسي Apache اغلب براي ساده كردن پيوندهاي طولاني و ناخوشايند به عنوان مثال URL فوق به URLهاي مناسب تر كه تايپ و تفسير بصري آسان تري دارند ، به كار مي روند. در اين مثال ، ما مي خواهيم لينك بالا را ساده كنيم تا به http://example.com/shirt/summer تبديل شود. مقادير پارامتر shirt و summer هنوز در آدرس هستند ، اما بدون نام رشته و نام اسكريپت.
در اينجا يك قانون براي انجام اين كار وجود دارد:
Simple substition
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]

summer / shirt به طور واضح در آدرس درخواستي مطابقت دارد و به Apache گفته مي شود كه به جاي results.php?item=shirt&season=summer را ارائه دهد.
پرچم هاي [QSA] معمولاً در قوانين بازنويسي استفاده مي شوند. آنها به Apache مي گويند هر رشته درخواست اضافي را در URL ارائه شده اضافه كند ، بنابراين اگر بازديد كننده http://example.com/shirt/summer?page=2 را تايپ كند، سرور مجازي با results.php?item=shirt&season=summer&page=2 پاسخ مي دهد. بدون آن ، رشته پرس و جو اضافي دور ريخته مي شود.
در حالي كه اين روش به جلوه مطلوب دست مي يابد ، هم نام آيتم و هم فصل به طور خاص كدگذاري مي شوند. اين بدان معني است كه اين قانون براي ساير موارد ، مانند pants ، يا فصول ديگر مانند winter كار نخواهد كرد.
براي عمومي تر كردن اين قاعده ، مي توانيم از عبارات منظم براي مطابقت با قسمت هاي آدرس اصلي استفاده كنيم و از آن قسمت ها در الگوي جايگزين استفاده كنيم. قانون اصلاح شده به اين شكل در خواهد آمد:
Simple substition
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

اولين گروه عبارت معمول در پرانتز با رشته اي حاوي حروف الفبا و اعدادي مانند shirt يا pants مطابقت دارد و بخش منطبق را به عنوان متغير $1 ذخيره مي كند. دومين گروه عبارت معمول در پرانتز دقيقاً summer ، winter ، fall يا spring را مطابقت ميدهد و به همين ترتيب بخش سازگار را به عنوان $2 ذخيره مي كند.
بخش هاي منطبق پس از آن در URL نتيجه به صورت متغيرهاي item و season به جاي مقادير shirt و summer استفاده مي شوند.
موارد فوق مثلاً http://example.com/pants/summer را به http://example.com/results.php?item=pants&season=summer تبديل مي كند. اين مثال همچنين مناسب آينده است ، به شما امكان مي دهد چندين مورد و فصل را به طور صحيح با استفاده از يك قانون واحد بازنويسي كنيد.
مثال 2 – اضافه كردن شرايط با منطق با استفاده از RewriteConds
قوانين بازنويسي الزاماً هميشه يك به يك و بدون محدوديت ارزيابي نمي شوند. دستورالعمل RewriteCond به ما امكان مي دهد شرايطي را براي قوانين بازنويسي خود اضافه كنيم تا كنترل كنيم چه زماني اين قوانين پردازش مي شوند. كليه RewriteConds با فرمت زير عمل مي كنند:
General RewriteCond structure
RewriteCond TestString Condition [Flags]

RewriteCond دستورالعمل RewriteCond را مشخص مي كند.
TestString رشته اي است كه بايد در برابر آن آزمايش كنيد.
Condition الگو يا شرط مطابقت است.
Flags پارامترهاي اختياري هستند كه ممكن است شرايط و قوانين ارزيابي را تغيير دهند.
اگر نتيجه ارزيابي RewriteCond درست باشد ، RewriteRule بعدي در نظر گرفته مي شود. اگر درست نباشد ، اين قانون كنار گذاشته مي شود. چندين RewriteConds ممكن است يكي پس از ديگري مورد استفاده قرار گيرند ، اگرچه همه بايد براي ارزيابي قانون بعدي درست باشند.
به عنوان نمونه ، فرض مي كنيم شما مي خواهيد به جاي نشان دادن صفحه خطاي استاندارد  404 Not Found ، همه درخواست ها را به فايل ها يا ديركتوري هاي غير موجود در سايت خود برگردانيد. اين امر با قوانين زير حاصل ميشود:
Redirect all requests to non-existent files and directories to home page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /

%{REQUEST_FILENAME} رشته اي براي بررسي است. در اين حالت ، نام فايل درخواستي است ، كه متغير سيستمي براي هر درخواست ميباشد.
-f يك شرايط داخلي است كه تأييد مي كند كه آيا نام درخواست شده در ديسك وجود دارد و يك فايل است. ! يك عامل منفي كننده است. تركيب! -f فقط درصورتي كه نام مشخص شده وجود نداشته باشد يا فايل نباشد ، درست ارزيابي مي شود.
• به طور مشابه ،! -d فقط درصورتي كه نام مشخص شده وجود نداشته باشد يا ديركتوري نباشد ، درست ارزيابي مي شود.
RewriteRule در خط نهايي فقط براي درخواست به فايل ها يا دايركتوري هاي غير موجود وارد خواهد شد. خود RewriteRule بسيار ساده است و هر درخواستي را به ريشه / وب سايت هدايت مي كند.
نتيجه
mod_rewrite به شما امكان مي دهد URL هاي قابل خواندن توسط انسان ايجاد كنيد. در اين آموزش ، ياد گرفتيد كه چگونه از دستورالعمل RewriteRule براي هدايت URL ها استفاده كنيد ، از جمله آنهايي كه رشته هاي پرس و جو دارند. همچنين ياد گرفتيد كه چگونه URL ها را با استفاده از دستورالعمل RewriteCond به صورت مشروط هدايت كنيد.
اگر مي خواهيد در مورد mod_rewrite اطلاعات بيشتري كسب كنيد ، به mod_rewrite Introduction و مستندات رسمي Apache براي mod_rewrite نگاهي بيندازيد.

 

 

از اين لينك ها زير مي توانيد آمورش هاي بيشتري براي لينوكس پيدا كنيد :

استفاده از nsh براي دستورات از راه دور اوبونتو 18 –  ميزباني وب سايت با Caddy اوبونتو 18

تنظيم سرور ذخيره سازي آبجكت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراك گذاري ترمينال با Terminalizer اوبونتو

تنظيم مسيريابي شرطي و پاسخگو با React Router v4  –  ايجاد يك URL كوتاه كننده با Django و GraphQL

يك برنامه رديابي سلامت را با React ،GraphQL و Okta –  ساخت برنامه ******** زمان حقيقي React و GraphQL

به روزرساني فيلترهاي مرتب سازي Angular (زاويه اي) –  با استفاده از React ، Superagent و API اينستاگرام

نحوه ساختن يك برنامه جهاني با Nuxt.js و Django –  دكمه دانلود با ريزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه كردن عكسهاي پيشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client يك وبلاگ ساخت

يك برنامه SSR با روتر Preact ، Unistore و Preact بسازيد  –  ساخت برنامه هاي وب پيشرونده با Angular

اشكال زدايي JavaScript در توليد با نقشه هاي منبع  –  مي توان با Koa برنامه “سلام جهاني” ساخت

ساختن يك برنامه با Node ، React ، Okta  –   مديريت حالت فرم در React با Redux Form

نحوه تنظيم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ويژوال استوديو از راه دور  –  احراز هويت API با JSON Web Tokens و Passport

راه اندازي يك پروژه React با Parcel  –  ايجاد Swiper مانند Netflix را در Vue

ساختن يك ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسكريپت

چگونه مي توان موتور جستجوي زمان واقعي را با Vue  –  ساختن سيستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراك زنده با كد ويژوال استوديو  –  ساخت يك مقياس اندازه گيري قدرت رمز عبور را در React

شروع عملي GraphQL با Node.js و Express  –  ساخت يك برنامه آب و هوا در Django

نحوه نصب Discourse روي Ubuntu 18  –  تأييد رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP براي انجام تراكنش MySQL

نصب و پيكربندي SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در رویا بلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.