ماژول mod_rewrite Apache به شما امکان می دهد URL ها را با تمیزتر بازنویسی کنید ، مسیرهای قابل خواندن توسط انسان را به رشته های پرس و جوی متناسب با کد تبدیل کنید. همچنین به شما امکان می دهد URL ها را بر اساس شرایط بازنویسی کنید.

فایل .htaccess به شما امکان می دهد بدون دسترسی به فایل های پیکربندی سرور مجازی ، قوانین بازنویسی را ایجاد و اعمال کنید. با قرار دادن فایل .htaccess در ریشه وب سایت خود ، می توانید بازنویسی ها را بر اساس هر سایت یا هر دایرکتوری مدیریت کنید.

در این آموزش ، mod_rewrite  را فعال کرده و از فایلهای .htaccess برای ایجاد یک تغییر مسیر URL اصلی استفاده می کنید ، و سپس چند مورد استفاده پیشرفته را پیدا می کنید.

پیش نیازها

برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:

  • یک سرور مجازی Ubuntu 20.04 که با دنبال کردن راهنمای تنظیم اولیه سرور مجازی Ubuntu 20.04 راه اندازی و شامل یک کاربر sudo غیر ریشه و فایروال تنظیم شده باشد.
  • Apache که با دنبال کردن مرحله 1 نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP)  در اوبونتو 20.04 نصب شده باشد.

مرحله 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 توصیه می کند زیرا Apache آن را سریعتر از این پردازش می کند.

با این حال ، در این مثال ساده ، افزایش عملکرد ناچیز خواهد بود. علاوه بر این ، تنظیم قوانین در .htaccess مناسب است ، به خصوص با چندین وب سایت در همان سرور مجازی. برای اجرای تغییرات نیازی به راه اندازی مجدد سرور مجازی نیست و نیازی به امتیازات اصلی برای ویرایش آن قوانین ، ساده سازی تعمیر و نگهداری و ایجاد تغییرات با یک حساب غیر شخصی نیست. برخی از نرم افزارهای منبع باز منبع آزاد ، مانند WordPress و Joomla ، اغلب برای تغییر و ایجاد قوانین اضافی در صورت تقاضا به یک فایل .htaccess متکی هستند.

قبل از شروع استفاده از فایل های .htaccess ، باید تنظیمات دیگری را انجام و آن را ایمن کنید.

به طور پیش فرض ، Apache با استفاده از فایل .htaccess اعمال قوانین بازنویسی را ممنوع می کند ، بنابراین ابتدا باید تغییراتی در فایل اعمال کنید. فایل پیش فرض پیکربندی Apache را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید.

·         $ sudo nano /etc/apache2/sites-available/000-default.conf·

در داخل آن فایل ، بلوک <VirtualHost *: 80> را که از خط اول شروع می شود ، پیدا خواهید کرد. در داخل آن بلوک ، بلوک جدید زیر را اضافه کنید تا فایل پیکربندی شما مانند زیر باشد. اطمینان حاصل کنید که همه بلوک ها به درستی قرار گرفته اند.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>

<Directory /var/www/html>

Options Indexes FollowSymLinks

AllowOverride All

Require all granted

</Directory>

 

. . .

</VirtualHost>

 

فایل را ذخیره کنید و ببندید. برای اجرای این تغییرات ، Apache را مجدداً راه اندازی کنید.

·         $ sudo systemctl restart apache2·

اکنون ، یک فایل .htaccess را در webroot ایجاد کنید.

·         $ 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 در webroot شروع کنید.

·         $ sudo nano /var/www/html/about.html·

کد HTML زیر را در فایل کپی کنید ، سپس آن را ذخیره کرده و ببندید.

/var/www/html/about.html

<html>

<head>

<title>About Us</title>

</head>

<body>

<h1>About Us</h1>

</body>

</html>

 

می توانید به این صفحه به آدرس 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 هایلایت شده را اضافه کرده و فایل را ذخیره کنید.

در این حالت ، ^about$ الگو است ، About.html ، substitution است ، و [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 اضافه می شوند. پارامترهای جداگانه با استفاده از چ (&) محدود می شوند. رشته های جستار ممکن است برای انتقال داده های اضافی بین صفحات برنامه فردی استفاده شود.

به عنوان مثال ، یک صفحه نتیجه جستجو که به زبان PHP نوشته شده است ممکن است از URL مانند http://example.com/results.php؟item=shirt&season=summer استفاده کند. در این مثال ، دو پارامتر اضافی به اسکریپت برنامه result.php موهومی منتقل می شود: item ، با متغیر shirt ، و مقدار summer. برنامه ممکن است از اطلاعات رشته پرس و جو برای ایجاد صفحه مناسب برای بازدید کننده استفاده کند.

قوانین بازنویسی Apache اغلب برای ساده کردن پیوندهای طولانی و ناخوشایند مانند موارد فوق در URL های دوستانه که تایپ و تفسیر بصری آسان تر است ، به کار می روند. در این مثال ، ما می خواهیم لینک بالا را ساده کنید تا به http://example.com/shirt/summer تبدیل شوید. پارامتر shirt  و summer  هنوز در آدرس هستند اما بدون نام رشته و نام اسکریپت.

در اینجا یک قانون برای اجرای این وجود دارد:

Simple substitution

RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]

 

shirt/summer به طور واضح در آدرس درخواستی مطابقت دارد و به 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 پاسخ خواهد داد. بدون آن ، رشته پرس و جو اضافی حذف می شود.

در حالی که این روش به افکت مطلوب دست می یابد ، هر دو نام آیتم و فصل در قانون کدگذاری می شوند. این بدان معنی است که این قانون برای سایر موارد ، مانند شلوار ، یا فصولی مانند زمستان کار نخواهد کرد.

برای عمومی تر کردن این قاعده ، می توانیم از عبارات معمول برای مطابقت با قسمت های اصلی آدرس استفاده کنیم و از آن قسمت ها در الگوی تعویض استفاده کنیم. سپس قانون اصلاح شده به شرح زیر خواهد بود:

Simple substitution

RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

 

اولین گروه عبارت معمول در پرانتز با رشته ای حاوی کاراکترهای الفبا و اعداد مانند shirt  یا pants  مطابقت دارد و قطعه را به عنوان متغیر $ 1 ذخیره می کند. دومین گروه عبارت معمول در پرانتز دقیقاً با summer, winter, fall, یا  spring مطابقت دارد و به همین ترتیب قطعه را به عنوان $2 ذخیره می کند.

قطعات همسان پس از آن به جای shirt  و summer  که قبلاً از آنها استفاده می کردیم در URL نتیجه در متغیرهای item  و season  استفاده می شوند.

موارد فوق ، به عنوان مثال ، http://example.com/pants/summer را به http://example.com/results.php؟item=pants&season=summer تبدیل می کند. این مثال همچنین اثبات آینده است ، و به چندین item  و season  اجازه می دهد تا با استفاده از یک قانون واحد به طور صحیح بازنویسی شوند.

مثال 2 – اضافه کردن شرایط با منطق با استفاده از RewriteConds

بازنویسی قوانین الزاماً همیشه یک به یک و بدون محدودیت ارزیابی نمی شوند. دستورالعمل RewriteCond به ما امکان می دهد تا شرایط را برای بازنویسی خود اضافه کنیم تا هنگام پردازش قوانین ، کنترل کنیم. کلیه RewriteConds با فرمت زیر عمل می کند:

General RewriteCond structure

RewriteCond TestString Condition [Flags]

 

  • RewriteCond بخشنامه RewriteCond را مشخص می کند.
  • TestString رشته ای است که باید در برابر آن آزمایش کنید.
  • Condition الگو یا شرط مطابقت است.
  • Flags پارامترهای اختیاری هستند که ممکن است شرایط و قوانین ارزیابی را تغییر دهند.

اگر RewriteCond درست ارزیابی شود ، RewriteRule  بلافاصله در نظر گرفته می شود. در صورت عدم موفقیت ، این قانون منتفی می شود. RewriteCond  چندگانه ممکن است یکی پس از دیگری مورد استفاده قرار گیرد و با رفتار پیش فرض ، همه باید درست ارزیابی کنند تا قاعده زیر در نظر گرفته شود.

به عنوان نمونه ، فرض می کنیم شما می خواهیئ به جای نشان دادن صفحه خطای استاندارد 404 Not Found ، همه درخواست ها را به فایل ها یا دیرکتوریهای غیر موجود در سایت خود به صفحه اصلی برگردانید. این امر می تواند با قوانین زیر انجام شود:

Redirect all requests to non-existent files and directories to home page

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . / [R=301]

 

به این شرح:

%{REQUEST_FILENAME} رشته ای برای بررسی است. در این حالت ، نام فایل درخواستی است ، که یک متغیر سیستمی برای هر درخواست است.

-f  یک وضعیت داخلی است که تأیید می کند که آیا نام درخواست شده در دیسک وجود دارد یا فایل است. ! یک عامل منفی است. ! -f  ترکیبی فقط درصورتی که یک نام مشخص وجود نداشته باشد یا فایل نداشته باشد ، درست ارزیابی می شود.

به طور مشابه ، ! -d  فقط درصورتی که یک نام مشخص وجود نداشته باشد یا یک دیرکتوری نباشد ، درست ارزیابی می شود.

RewriteRule در خط نهایی فقط برای درخواست ها به فایل ها یا دایرکتوری های غیر موجود وارد خواهد شد. خود RewriteRule  بسیار ساده است. نقطه . در این الگو با هر چیزی مطابقت دارد و جایگزینی هر درخواست را به ریشه / وب سایت هدایت می کند.

علاوه بر این ، پرچم [R = 301]  به Apache می گوید یک کد پاسخ HTTP  ، 301 Moved Permanently را به مرورگر بازگرداند ، در نتیجه مرورگر می داند که تغییر مسیر اتفاق افتاده است و صریحاً به جای URL درخواست شده ، ریشه وب سایت را واگذار می کند. و تغییری در نوار آدرس مرورگر اعمال میشود.

بدون این پرچم ، Apache  محتوای اصلی وب سایت را بر می گرداند ، اما مرورگر همچنان فکر می کند URL صفحه درخواستی وجود داشته باشد و آدرس درخواست شده را ابتدا در نوار آدرس نشان دهد.

نتیجه

mod_rewrite  به شما امکان می دهد URL های قابل خواندن توسط انسان را ایجاد کنید. در این آموزش شما از دستورالعمل RewriteRule برای هدایت آدرس های اینترنتی از جمله آدرس ها با رشته های پرس و جو استفاده کرده اید. همچنین با استفاده از دستورالعمل RewriteCond  URL  های هدایت شونده مشروط را نوشتید.

اگر می خواهید در مورد mod_rewrite اطلاعات بیشتری کسب کنید ، به mod_rewrite Introduction و مستندات رسمی Apache  برای mod_rewrite نگاهی بیندازید.

 

نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در اوبونتو 20.04

نحوه دانلود فایل ها با cURL

نحوه نصب و ایمن سازی Redis در Centos7

چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد

نحوه نصب Webmin در Ubuntu 20.04

نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04

نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible

چگونه می توان REST API را با Prisma و PostgreSQL ساخت

نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 18.04

نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04

 

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان –