Дахин бичих горимыг суулгаж байна. Apache дээр Mod дахин бичих модулийг идэвхжүүл

Гэр / Windows 7

Онлайн дэлгүүрт хамгийн сүүлд зочилсон тухайгаа эргэн санаарай. Та хайж буй бүтээгдэхүүнээ олсны дараа дараах URL хаягийг харах болно.

Энэ нь энэ сайтын хөгжүүлэгчид янз бүрийн бүтээгдэхүүний ангилалд зориулсан тусдаа лавлахуудыг бий болгоход маш их цаг зарцуулснаас биш, харин mod_rewrite хэмээх тохиромжтой модулийн ачаар тохиолддог. Энэ модуль нь танд захиалгат болон хялбаршуулсан URL үүсгэх боломжийг олгодог. URL нь үнэндээ иймэрхүү харагдаж байна:

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

Энэхүү гарын авлагад энэ модулийг идэвхжүүлэх, .htaccess хуудас үүсгэх, ашиглах, URL дахин бичих тохиргоог багтаасан болно.

Шаардлага

Нэмж хэлэхэд та эхлээд apache-г суулгах хэрэгтэй. Учир нь хурдан суурилуулалт Ubuntu дахь энэ вэб серверийн тушаалыг ашиглана:

sudo apt-get install apache2

1: mod_rewrite-г идэвхжүүлнэ

Эхлээд та mod_rewrite-г идэвхжүүлэх хэрэгтэй, энэ нь маш энгийн:

sudo a2enmod дахин бичих

Энэ тушаал нь модулийг идэвхжүүлэх эсвэл модуль аль хэдийн идэвхжсэн бол "Модуль дахин бичихийг аль хэдийн идэвхжүүлсэн" гэсэн мессежийг харуулах болно.

2: .htaccess гэж юу вэ?

Модуль идэвхжсэний дараа та сайтын санд .htaccess файл үүсгэн холбоосыг дахин бичих тохиргоог хийж болно.

.htaccess файл нь арга юм нарийн тааруулахсерверийн тохиргооны файлуудыг өөрчлөхгүйгээр сайт. Файлын нэрийг эхлүүлсэн цэг нь файл нуугдсан гэсэн үг юм.

Нэмж дурдахад, htaccess файлыг байрлуулах нь чухал бөгөөд учир нь энэ файлын тохиргоо нь түүний байрлах директорийн бүх файл, дэд директорт нөлөөлөх болно.

Та .htaccess файлыг ашиглан үүсгэж болно текст засварлагч, дараа нь ftp клиент ашиглан сайтад байршуулна уу.

Анхаарна уу: файлыг яг .htaccess гэж нэрлэх ёстой; Файлын нэр нь нэмэлт өргөтгөл агуулж болохгүй.

Үүнээс гадна, та example.com-ын оронд энэ тушаалыг ашиглан терминалаар дамжуулан .htaccess файл үүсгэж болно. домэйн нэрсайт.

.htaccess файлыг оруулаад

.htaccess файлыг хүчингүй болгохыг зөвшөөрөх стандарт тохиргоосайтын тохиргооны файлыг нээнэ үү.

Анхаарна уу: Энэ нь sudo давуу эрхүүдийг нэмэгдүүлэх шаардлагатай болно.

sudo nano /etc/apache2/sites-available/default

Энэ файлаас дараах хэсгийг олоод AllowOverride мөрийн утгыг өөрчил (None гэснийг Бүгдээр солино). Үүний үр дүнд хэсэг нь дараах байдлаар харагдах болно.


Сонголтуудын индексүүд FollowSymLinks MultiViews
Бүгдийг хүчингүй болгохыг зөвшөөрөх
Захиалга зөвшөөрөх, татгалзах
бүгдээс зөвшөөрнө

Өөрчлөлтүүдийг хадгалж, файлыг хаасны дараа apache серверийг дахин эхлүүлнэ үү. Одоо .htacess файлууд серверийн бүх сайтуудад боломжтой болсон.

sudo үйлчилгээг apache2 дахин эхлүүлнэ

Одоо та сайтынхаа URL хаягуудыг дахин бичихэд бэлэн боллоо.

3: URL-уудыг дахин бичих

URL дахин бичих үйл ажиллагаа бүхэлдээ .htaccess файлд явагдана. Ерөнхийдөө бүх URL дахин бичих командууд ижил загвараар явагддаг:

Дахин бичих дүрмийн загварыг орлуулах

Энэ тушаалд ашигласан сонголтууд:

  • RewriteRule: Энэ бол шаардлагатай удирдамжийг тохируулах хэсэг юм.
  • Загвар: Энэ хэсэг нь ердийн илэрхийлэл ашиглан хүссэн URL-г тайлбарлахад зориулагдсан. Энэ заавар нь ердийн хэллэгийг хамардаггүй; зарим нь хэрэгтэй мэдээлэлЭнэ сэдвээр мэдээлэл Apache сайтаас олж болно.
  • Орлуулах: Хуудасны бодит URL-г харуулна. Энэ холбоос нь PHP параметрүүд эсвэл тоонуудын урт дарааллаас бүрддэг тул санахад хэцүү байдаг, жишээ нь: www.besthop.com/gadgets.php?innovation=laptops
  • Нэмэлт тугнууд: Туг нь илэрхийллийн үйлдлийг өөрчлөх боломжтой RewriteRule зааврын төгсгөлд байрлах шошго юм. Зарим нийтлэг тугнууд: [F] нь URL хаягийг зөвшөөрдөггүй, том үсгийг үл тоомсорлодог, эсвэл ашигласан дахин чиглүүлэх кодыг хянадаг, [L] нь цувралын сүүлчийн дүрэм гэдгийг заадаг.

URL дахин бичих жишээнүүд

Жишээ 1: А хуудсыг нээ - та В хуудас руу орно

Энэ нь URL дахин бичих хамгийн энгийн жишээ юм: сайтын зочин хөтөч рүү нэг URL-г оруулдаг боловч нөгөө рүү чиглүүлдэг. Энэ зан үйлийг тохируулахын тулд энэ хэсгийн зааврыг дагана уу.

Эхлэхийн тулд хоёр вэб хуудас үүсгэх; жишээлбэл, эхнийх нь алимны тухай (apples.html), хоёр дахь нь жүржийн тухай (oranges.html).

Энэ кодыг хуулна уу:



Алим


Энэ хуудас нь алимны тухай юм



Дараа нь хоёр дахь хуудас үүсгэнэ үү энэ тохиолдолд, жүржид зориулсан хуудас). Үүнийг хийхийн тулд энэ кодын блок дахь алимыг жүржээр солиход л хангалттай.

Дараа нь .htaccess файлыг нээнэ үү:

sudo nano /var/www/example.com/.htaccess

Дараах URL дахин бичих командуудыг нэмнэ үү:

RewriteEngine асаалттай
RewriteRule ^oranges.html$ apples.html

Файлыг хадгалаад хаа.

Дараа нь /oranges.html хуудсанд зочилно уу, энэ нь /apples.html хуудасны мэдээллийг агуулна.

Дээрх тушаалыг нарийвчлан авч үзье.

  • ^oranges.html: Хүссэн хуудас хэрхэн эхлэхийг зааж өгнө. Карет (^) нь мөрийн эхлэлийг заана. Өөрөөр хэлбэл, хэрэв URL-ыг нь дахин бичих шаардлагатай хуудас өөрөөр эхэлсэн бол (жишээлбэл, oranges.html-ийн оронд oranges_1.html) энэ нь дахин бичих дүрэмтэй таарахгүй бөгөөд birds.html руу дахин чиглүүлэхгүй.
  • $: Долларын тэмдгийг URL-ийн төгсгөлд байрлуулсан. Дахин хэлэхэд, мөр нь өөрөөр төгссөн бол (жишээ нь, зарласан сүүлийн тэмдэгтүүдийн дараа ямар нэгэн тэмдэгт байгаа) вэб хуудсыг дахин бичих дүрмээр хүлээн зөвшөөрөхгүй.
  • apples.html: Хөтөч нь энэ хуудас руу урсгалыг чиглүүлдэг.

Жишээ 2: URL дахь дэд директор хэлбэрээр параметр

URL-г шалгана уу:

http://example.com/results.php?products=apple

Энэ нь дараах байдлаар илүү тодорхой харагдах болно.

http://example.com/products/apple

Үүнийг хийхийн тулд та .htaccess-д дараах мөрүүдийг нэмэх хэрэгтэй.

RewriteEngine асаалттай
RewriteRule ^ бүтээгдэхүүн/(+)/?$ results.php?products=$1

Эдгээр мөрүүд нь дараах сонголтуудаас бүрдэнэ.

  • ^ бүтээгдэхүүн: Энэ тохиолдолд дахин чиглүүлэхийн тулд URL нь бүтээгдэхүүн гэсэн үгээр эхлэх ёстой (энэ нь зөвхөн домэйны дараах текстэд хамаарна гэдгийг анхаарна уу). Дахин хэлэхэд, хэрэв URL өөрөөр эхэлбэл дүрэм үйлчлэхгүй.
  • (+): Энэхүү хаалтанд оруулсан текст нь URL нь ямар ч тэмдэгтээс бүрдэж болохыг харуулж байна. Нэмэх тэмдэг нь хаалтанд нэг буюу хэд хэдэн тэмдэгт оруулах боломжтойг илэрхийлнэ.
  • /?$: Долларын тэмдэг нь шугамын төгсгөлийг тэмдэглэнэ. Асуултын тэмдэгмөрийн төгсгөлд налуу зураас тавих боломжийг танд олгоно (энэ нь заавал биш ч гэсэн).
  • : Энэ нь дүрмийн бүх тэмдэгтийн тохиолдлыг үл тоомсорлохыг харуулсан хэллэгийн төгсгөлд байгаа туг юм.

Жишээ 3: Цэвэр холбоосыг тохируулах

Хэрэв таны сайтын URL хэтэрхий урт эсвэл төвөгтэй байвал энэ функц хэрэгтэй болно.

Жишээ болгон та энэ URL-г авч болно:

http://example.com/results.php?products=produce&type=fruit&species=алим

http://example.com/produce/fruit/apple

Үүнийг хийхийн тулд та .htaccess-д дараах мөрүүдийг нэмэх хэрэгтэй (дашрамд хэлэхэд .htaccess нь хязгааргүй тооны ийм хэсгүүдийг агуулж болно):

RewriteEngine асаалттай
RewriteRule ^(мах|үйлдвэрлэх|цагаан идээ)/([^/.]+)/([^/.]+)$ results.php?products=$1&төрөл=$2&зүйл=$3

Энэ кодыг илүү дэлгэрэнгүй авч үзье:

  • Квадрат (^ тэмдэг) нь илэрхийллийн эхлэлийг заана.
  • (мах|үйлдвэрлэх|сүүн бүтээгдэхүүн): Харуулж болох параметрүүдийг хязгаарлахын тулд зөвхөн хаалтанд зөвшөөрөгдсөн утгыг зааж өгнө үү (энэ тохиолдолд мах, бүтээгдэхүүн, сүүн бүтээгдэхүүн). Хэрэв URL нь хаалтанд ороогүй параметр агуулж байвал дахин бичихгүй.
  • ([^/.]+) тэмдэгтээс бусад бүх зүйлийг (энэ тохиолдолд ташуу зураас болон цэг) налуу зураасаар бичиж болохыг заана.
  • results.php?products=$1&type=$2&species=$3: Хаалтанд байгаа утга бүрийг задалж, орлуулах хэсэг дэх урт URL руу оруулна. $1 нь эхний хаалтуудыг, хоёр дахь нь $2, гурав дахь нь $3 гэсэн утгатай.

Өгүүллийн үргэлжлэлийг олж болно.

Шошго: ,

Энэ зааварт бид Apache 2 болон mod_rewrite модулийг ашиглан URL дахин бичихийг хэрхэн удирдах талаар сурах болно. Энэ модуль нь танд URL-уудыг илүү цэвэр байдлаар дахин бичих, хүний ​​унших боломжтой замыг кодод ээлтэй асуулгын мөр болгон хөрвүүлэх эсвэл нэмэлт нөхцөл дээр үндэслэн URL-уудыг дахин чиглүүлэх боломжийг олгоно.

Энэхүү гарын авлага нь хоёр хэсэгт хуваагдана. Эхнийх нь вэбсайтын жишээг бий болгож, дахин бичих энгийн жишээг харуулж байна. Хоёрдахь хэсэг нь түгээмэл хэрэглэгддэг дахин бичих дүрмийн хоёр илүү гүнзгий жишээг агуулдаг.

Урьдчилсан нөхцөл

Энэхүү гарын авлагын дагуу танд дараахь зүйлс хэрэгтэй болно.

  • Нэг Debian сервер 8 серверийн анхны тохиргоотой хамт суулгасан.
  • Өгүүллийн дагуу сервер дээр Apache 2 суулгасан.

Алхам 1 - mod_rewrite-г идэвхжүүлнэ

Эхлээд бид mod_rewrite-г идэвхжүүлэх хэрэгтэй. Энэ нь боломжтой боловч сүлжээнд ороогүй болно Apache суулгаж байна 2.

Sudo a2enmod дахин бичих

Энэ нь модулийг идэвхжүүлдэг эсвэл модулийг аль хэдийн идэвхжүүлсэн гэдгийг танд анхааруулдаг. Өөрчлөлтүүд хүчин төгөлдөр болохын тулд Apache-г дахин эхлүүлнэ үү.

mod_rewrite одоо бүрэн идэвхжсэн. Дараагийн алхамд бид .htaccess файлыг үүсгэх бөгөөд үүнийг дахин чиглүүлэлтийн дахин бичих дүрмийг тодорхойлоход ашиглах болно.

Алхам 2 – .htaccess-ийг тохируулах

htaccess файл нь серверийн тохиргооны файлд хандахгүйгээр дахин бичих дүрмээ өөрчлөх боломжийг бидэнд олгодог. Ийм учраас .htaccess нь таны вэб програмын аюулгүй байдалд чухал үүрэгтэй. Файлын нэрний өмнөх үе нь файлыг нуухыг баталгаажуулдаг.

Анхаарна уу

Таны .htaccess файлд байрлуулах аливаа дүрмийг серверийн тохиргооны файлд шууд байрлуулж болно. Үнэн хэрэгтээ, албан ёсны Apache баримт бичиг нь Apache файлуудыг илүү хурдан боловсруулдаг тул .htaccess биш харин серверийн тохиргооны файлуудыг ашиглахыг зөвлөж байна.

Гэсэн хэдий ч үүн дээр энгийн жишээ, гүйцэтгэлийн өсөлт бага зэрэг байх болно. Нэмж дурдахад .htaccess дүрмийг тохируулах нь ялангуяа нэг сервер дээр олон вэбсайттай байх нь тохиромжтой. Өөрчлөлтүүд хүчин төгөлдөр болохын тулд серверийг дахин ачаалах шаардлагагүй бөгөөд эдгээр дүрмийг засахын тулд супер хэрэглэгчийн эрх шаарддаггүй тул засвар үйлчилгээ, нэмэлт өөрчлөлтийг эрхгүй бүртгэлээс хийх боломжтой болгодог. Зарим алдартай нээлттэй эхийн програмууд эх код Joomla гэх мэт .htaccess файлыг ихэвчлэн ашигладаг програм хангамжшаардлагатай бол нэмэлт дүрмийг өөрчлөх, бий болгох.

Эхлэхийн өмнө бид хэд хэдэн тохиргоог суулгаж, аюулгүй болгох шаардлагатай.

Анхдагч байдлаар, Apache нь дахин бичих дүрмийг хэрэгжүүлэхийн тулд .htaccess файлыг ашиглахыг хориглодог тул та эхлээд файлд өөрчлөлт оруулахыг зөвшөөрөх хэрэгтэй. Nano эсвэл дуртай текст засварлагчийг ашиглан Apache дээр анхдагч тохиргооны файлыг нээнэ үү.

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

Энэ файл дотор та блок олох болно , эхний мөрөөс эхлэн. Энэ блок дотор дараахь зүйлийг нэмнэ үү шинэ блокИнгэснээр таны тохиргооны файл иймэрхүү харагдах болно. Бүх блокууд зөв доголдсон эсэхийг шалгаарай.

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

Сонголтуудын индексүүд FollowSymLinks MultiViews AllowOverride Бүгдийг шаардах Бүгдийг зөвшөөрсөн . . .

Файлыг хадгалаад хаа. Өөрчлөлтүүд хүчин төгөлдөр болохын тулд Apache-г дахин эхлүүлнэ үү.

Sudo systemctl apache2-г дахин эхлүүлнэ

Одоо вэбийн үндсэн директорт .htaccess файл үүсгэ.

Дарж бичихийг идэвхжүүлэхийн тулд шинэ файлын дээд талд энэ мөрийг нэмнэ үү.

/var/www/html/.htaccess

RewriteEngine асаалттай

Файлыг хадгалаад гарна уу.

Та одоо вэб програмынхаа чиглүүлэлтийн дүрмийг удирдахад ашиглаж болох .htaccess файлтай боллоо. Дараагийн алхамд бид дахин бичих дүрмийг харуулахын тулд ашиглах сайтын жишээ файлуудыг үүсгэх болно.

Алхам 3 - URL дахин бичих тохиргоог хийх

Энд бид URL-г бодит кодын зам болгон хувиргах үндсэн URL дахин бичихийг суулгах болно. Тодруулбал, бид хэрэглэгчийн хандалтыг зөвшөөрөх болно. http://your_server_ip/about

Вэбийн үндсэн директорт about.html нэртэй файл үүсгэж эхэлцгээе.

Sudo nano /var/www/html/about.html

Дараах HTML кодыг файл руу хуулж аваад хадгалаад хаа.

/var/www/html/about.html

Бидний тухай

Бидний тухай

Та http://your_server_ip/about.html хуудас руу нэвтэрч болно, гэхдээ хэрэв та http://your_server_ip/about руу нэвтрэхийг оролдвол алдаа гарах болно гэдгийг анхаарна уу. 404 Олдсонгүй . Гэхдээ хэрэглэгчдэд дүрмийг дахин бичихийн оронд about ашиглан хуудас руу нэвтрэхийн тулд энэ функцийг зөвшөөрөх болно.

RewriteRules нь дараах форматыг дагадаг:

RewriteRule-ийн ерөнхий бүтэц

Дахин бичих Дүрмийн загварыг орлуулах

  • RewriteRule нь удирдамжийг тодорхойлдог.
  • загвар нь хөтчийн үзэж буй URL-аас хүссэн стрингтэй таарах ердийн илэрхийлэл юм.
  • орлуулах нь жинхэнэ URL руу хүрэх зам, өөрөөр хэлбэл зам юм файлын серверүүдАпачи.
  • тугнууд нь дүрэм хэрхэн ажилладагийг тодорхойлохын тулд өөрчлөх боломжтой нэмэлт параметрүүд юм.

.htaccess файлыг нээнэ үү.

Sudo nano /var/www/html/.htaccess

Эхний мөрийн дараа улаанаар тэмдэглэсэн RewriteRule-г нэмээд файлыг хадгална уу.

/var/www/html/.htaccess

RewriteRule дээрх RewriteEngine ^about$ about.html

Энэ тохиолдолд ^about$ нь загвар, about.html нь орлуулах, туг байна. Бидний жишээнд хэд хэдэн тэмдэгт ашигладаг онцгой утга:

  • ^ нь URL-ийн эхлэлийг, your_server_ip / -ийн дараа заана.
  • $ нь URL-ийн төгсгөлийг заана.
  • about нь “about” мөртэй тохирч байна.
  • about.html нь хэрэглэгчийн ханддаг бодит файл юм.
  • нь дүрмийн жижиг үсгийг мэдрэмжгүй болгодог туг юм.

Одоо та хөтчөөсөө http://your_server_ip/about руу хандах боломжтой байх ёстой. Үнэн хэрэгтээ, дээр дурдсан дүрмийн дагуу дараах URL-ууд нь about.html руу чиглэх болно:

  • http://your_server_ip /about , учир нь дүрмийн тодорхойлолт.
  • http://your_server_ip /About , Дүрэм нь жижиг жижиг том үсгийн мэдрэмжгүй тул.
  • http://your_server_ip/about.html учир нь анхны зөв файлын нэр үргэлж ажиллах болно.

Доор байхгүй болно:

  • http://your_server_ip /about/ учир нь дүрэмд $ тэмдэг ашигласны дараа юу ч байж болохгүй гэж тодорхой заасан байдаг.
  • http://your_server_ip /холбоо барих учир нь дүрмийн тухай мөртэй таарахгүй.

Одоо та амьд .htaccess файлтай байна энгийн дүрэм, та өөрийн хэрэгцээнд тохируулан өөрчилж, өргөжүүлэх боломжтой. Дараах хэсгүүдэд бид хамгийн түгээмэл хэрэглэгддэг удирдамжийн хоёр нэмэлт жишээг харуулах болно.

Жишээ 1 – RewriteRule ашиглан асуулгын мөрийг хялбарчлах

Вэб програмуудыг ихэвчлэн ашигладаг асуулгын мөрүүд, хаягийн ард асуултын тэмдэг (?) ашиглан URL-д хавсаргана. Хувь хүний ​​параметрүүдийг амперсанд (&) -аар тусгаарлана. Асуулгын мөрүүдийг програмын хуудасны хооронд нэмэлт өгөгдөл дамжуулахад ашиглаж болно.

Жишээлбэл, PHP дээр бичсэн хайлтын үр дүнгийн хуудаснууд нь http://example.ru/results.php?item=shirt&author=andreyex гэх мэт URL ашиглаж болно. Энэ жишээнд хоёр байна нэмэлт параметрүүдТөсөөллийн програмын скриптийг дамжуулна.php: үнэ цэнтэй цамц болон зохиогчтой зүйл andreyex . Аппликешн нь зочдод зориулсан зөв хуудсыг бүтээхийн тулд асуулгын мөрийн мэдээллийг ашиглах боломжтой.

Дээр дурдсан шиг урт, үзэмжгүй холбоосыг хялбарчлахад Apache-ийн дахин бичих дүрмийг ихэвчлэн ашигладаг ээлтэй URL-ууд, эдгээрийг нүдээр оруулах, тайлбарлахад хялбар байдаг. Энэ жишээнд бид дээрх холбоосыг хялбарчилж http://example.ru/shirt/andreyex болгохыг хүсч байна. цамц болон зохиогчийн болон andreyex параметрийн утгуудыг өмнөх хаяг руу оруулна, гэхдээ асуулгын мөр болон скрипт нэргүй.

Үүнийг хэрэгжүүлэх нэг дүрэм энд байна:

Энгийн жишээ

RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex

shirt/andreyex нь хүссэн хаягтай шууд таарч байгаа бөгөөд Apache-д оронд нь results.php?item=shirt&author=andreyex-г ажиллуулах заавар өгсөн.

тугуудыг ихэвчлэн дахин бичих дүрэмд ашигладаг. Тэд Apache-д хандаж байгаа URL-д нэмэлт асуулгын мөрийг нэмэхийг хэлдэг. Үүнгүйгээр нэмэлт асуулгын мөрийг устгах болно. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2

Хэдийгээр энэ арга нь хүссэн үр дүнд хүрсэн ч элементийн нэр болон зохиогч хоёулаа дүрэмд хатуу кодлогдсон байдаг. Энэ нь өмд, зохиогч, устгагч гэх мэт бусад зүйлд дүрэм ажиллахгүй гэсэн үг юм.

Дүрмийг илүү ерөнхий болгохын тулд бид эх хаягийн нэг хэсгийг тааруулахын тулд ердийн хэллэгийг ашиглаж, орлуулах загварт тэдгээр хэсгүүдийг ашиглаж болно. Өөрчлөгдсөн дүрэм дараах байдлаар харагдах болно.

Энгийн жишээ

RewriteRule ^(+)/(andreyex|устгагч|намар|хавар) results.php?item=$1&author=$2

Хаалтанд байгаа эхний тогтмол илэрхийлэл нь цамц, өмд гэх мэт үсэг, тоон тэмдэгт, тоо агуулсан мөртэй таарч, тохирох хэсгийг $1 хувьсагч болгон хадгална. Хаалтанд байгаа хоёр дахь бүлэг илэрхийлэл нь andreyex , destroyer , fall or spring -тай яг таарч байгаа бөгөөд тохирох фрагментийг $2 хэлбэрээр хадгалдаг.

Дараа нь таарсан хэсгүүдийг URL-д өмнө нь хэрэглэж байсан хатуу кодтой цамц болон андрейексийн оронд тухайн зүйл болон зохиогчийн хувьсагчдад байрлуулна.

Дээрх нь жишээ нь http://example.ru/pants/andreyex-ийг http://example.ru/results.php?item=pants&author=andreyex болгон хувиргах болно. Энэ жишээ нь мөн ирээдүйд зориулагдсан бөгөөд нэг дүрэм ашиглан олон элемент болон зохиогчийг зөв бичих боломжийг олгодог.

Жишээ 2 - RewriteConds ашиглан логиктой нөхцөл нэмэх

Дахин бичих дүрмийг ямар ч хязгаарлалтгүйгээр нэг нэгээр нь үнэлдэг байх албагүй. RewriteCond заавар нь биднийг дахин бичих дүрмүүддээ дүрмүүд хэзээ боловсруулагдаж байгааг хянах нөхцөлийг нэмэх боломжийг олгодог. RewriteConds нь дараах форматыг дагадаг:

RewriteCond-ийн ерөнхий бүтэц

RewriteCond TestString нөхцөл

  • RewriteCond нь RewriteCond удирдамжийг тодорхойлдог.
  • TestString бол шалгаж байгаа мөр юм.
  • Нөхцөл байдал нь тохирох загвар эсвэл нөхцөл юм.
  • Туг нь нөхцөл, үнэлгээний дүрмийг өөрчлөх боломжтой нэмэлт параметрүүд юм.

Хэрэв RewriteCond үнэн бол RewriteRule-ийг шууд дараа нь авч үзэх болно. Хэрэв тийм биш бол дүрмийг хүчингүй болгоно. Олон тооны RewriteConds-ийг нэг нэгээр нь ашиглаж болох бөгөөд анхдагч байдлаараа бүгдийг нь үнэлж, үнэн мөнийг нь дараагийн дүрмээр авч үзэх шаардлагатай.

Жишээлбэл, та өөрийн сайт дээр байхгүй файл, лавлах бүх хүсэлтийг дахин чиглүүлэхийг хүсч байна гэж бодъё. нүүр хуудасстандарт алдааны хуудсыг харуулахын оронд 404 Олдсонгүй. Үүнийг дараах дүрмийн нөхцлөөр хийж болно.

Байгаагүй файл, лавлах бүх хүсэлтийг үндсэн хуудас руу дахин чиглүүлэх

RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule . /

Дээрх зүйлийг харгалзан үзвэл:

  • %(REQUEST_FILENAME) нь шалгах мөр юм. Энэ тохиолдолд хүссэн файлын нэр, энэ нь хүсэлт бүрт боломжтой системийн хувьсагч юм.
  • -f нь хүссэн нэр нь дискэн дээр байгаа эсэх, файл мөн эсэхийг шалгадаг суурилагдсан нөхцөл юм. ! - Үгүйсгэх оператор юм. Хосолсон үед !-f нь зөвхөн заасан нэр байхгүй эсвэл файл биш тохиолдолд үнэн гэж үнэлнэ.
  • Үүний нэгэн адил, !-d нь зөвхөн заасан нэр байхгүй эсвэл лавлах биш тохиолдолд үнэн гэж үнэлдэг.

Сүүлийн мөрөнд байгаа RewriteRule нь зөвхөн байхгүй файл, лавлах хүсэлтэд хүчинтэй болно. RewriteRule нь өөрөө маш энгийн бөгөөд хүсэлт бүрийг сайтын эх / үндэс рүү чиглүүлдэг.

Дүгнэлт

mod_rewrite нь хүний ​​унших боломжтой URL-уудыг өгөхөд үр дүнтэй ашиглаж болох ашигтай Apache модуль юм. Энэ хичээлээр та RewriteRule зааврыг URL хаягуудыг, тэр дундаа асуулгын мөрийг дахин чиглүүлэхэд хэрхэн ашиглах талаар сурсан. Та мөн RewriteCond удирдамжийг ашиглан URL дахин чиглүүлэлтийн талаар олж мэдсэн.

Заримдаа хүмүүс асуудалтай тулгардаг - apache сервер таны .htaccess файлыг уншдаггүй эсвэл apache URL-г дахин бичдэггүй, бид тохиргооны файлуудад зөв дахин бичих дүрмийг ашиглаж байна. Дахин бичих модуль apache-д ороогүй учраас энэ нь тохиолддог. Mod_rewrite модуль сервер дээр анхдагчаар идэвхжээгүй тул дахин бичихийг ашиглахын тулд mode_rewrite-г гараар идэвхжүүлэх хэрэгтэй. "Debian/Ubuntu-д Apache-д зориулсан mod_rewrite модулийг идэвхжүүлэх" гэсэн нийтлэлдээ би үүнийг хэрхэн хийхийг танд хэлэх болно.

1. Apache2 дээр mod_rewrite модулийг идэвхжүүлж байна

Үүнийг хийхийн тулд би "a2enmod" командыг ашиглан ямар ч модулийг идэвхжүүлдэг Apache вэб сервер 2. Тиймээс apache-д зориулсан mod_rewrite модулийг идэвхжүүлэхийн тулд дараах тушаалыг ашиглана уу:

$ sudo a2enmod дахин бичих

2. Виртуал хост дээр ReWrite-г идэвхжүүлнэ

Apache-д зориулсан ReWrite модулийг идэвхжүүлсний дараа та виртуал хостын тохиргооны файлдаа "AllowOverride All"-г нэмэх хэрэгтэй. Энэ тохиргоог мөн apache тохиргооны үндсэн файлыг засварлах замаар дэлхий даяар идэвхжүүлж болно:

Сонголтуудын индексүүд FollowSymLinks AllowOverride All

3. Apache2 тохиргоог дахин эхлүүлнэ үү

Apache-д mod_rewrite модулийг идэвхжүүлсний дараа та Apache2 серверийг дахин эхлүүлэх хэрэгтэй.

# apache2 үйлчилгээг дахин эхлүүлнэ үү

“Debian/Ubuntu дээр Apache-д mod_rewrite модулийг идэвхжүүлэх” сэдэв одоо дууссан.

Apache вэб серверийн энэ модуль нь эх сурвалжийн URL-уудыг хөрвүүлэхэд зориулагдсан боловч энэ нь ихэвчлэн HUR (Human Readable URL) үүсгэхэд ашиглагддаг http://example.com/2005/. 12/ оронд нь 31/theme.html Энэ механизмыг ихэвчлэн мэдээллийн сайтуудад ашигладаг. Үүний зэрэгцээ хэрэглэгчид аль файлд (скрипт) нэвтэрч байгааг олж харахгүй байх давуу талтай.

Дараах хэдэн асуултыг харцгаая.
1. Apache дээр mod_rewrite-г хэрхэн идэвхжүүлэх вэ?
2. Бага зэрэг онол. mod_rewrite хэрхэн ажилладаг.
3. Энгийн жишээ.
4. Скрипт дээр юу хийх ёстой вэ?
5. Юу өгдөг энэ хандлагаболон ерөнхийдөө mod_rewrite?
6. Боломжит алдаа.
7. mod_rewrite судлахад зориулсан Алма Матер

1. Apache дээр mod_rewrite-г хэрхэн идэвхжүүлэх вэ?

Apache вэб сервер дээр mod_rewrite-г идэвхжүүлэхийн тулд та httpd.conf файлыг засах хэрэгтэй.
Үүнийг хийхийн тулд httpd.conf файлыг нээгээд дараах мөрийг олоорой.

Код
#LoadModule rewrite_module modules/mod_rewrite.so

Мөн сэтгэгдлийг устгана уу

Код
LoadModule rewrite_module modules/mod_rewrite.so

Дараа нь бид вэб серверийг дахин эхлүүлнэ.

2. Бага зэрэг онол. mod_rewrite хэрхэн ажилладаг.

Дүрмээр бол mod_rewrite-тэй дөнгөж танилцсан програмистууд энэ механизм хэрхэн ажилладагийг бүрэн ойлгодоггүй. Үүнээс болж удаан хугацаагаар"хүүхэд насны алдаа.

Тэгэхээр. Бидний мэдэж байгаагаар GET хүсэлт гэж нэрлэгддэг, i.e. http://example.com/2005/12/31/theme.html вэб серверт "ирдэг" (бидний жишээнд - Apache). Сервер юу хийдэг вэ? Юуны өмнө тэрээр энэ хостын тохиргоог хардаг. Үүний дараа тэр юу хийхээ шийднэ. Үндсэн хуудасны агуулгыг хэрэглэгч рүү (жишээ нь index.html) буцааж илгээх эсвэл index.php үндсэн скриптийн кодыг тайлбарлах эсвэл 404 алдаа буцаах гэх мэт. гэх мэт index.phtml-тэй үргэлжлүүлэн ажиллана гэж бодъё. Цаашид юу болохыг та аль хэдийн мэдэж байгаа байх. Бид сервер хостын тохиргоог харах мөчид анхаарлаа хандуулах болно. Тэдгээрийн тоо маш олон байж болно. Гэхдээ сервер .htaccess файлыг root дотроос олохыг оролддог. (Apache-ийн тохиргооны файл шууд). Энэ файлд mod_rewrite хөрвүүлэх дүрмүүд байрладаг (тэдгээрийг httpd.conf дээр бас байрлуулж болно). Тэдгээр. Би URL хөрвүүлэлтийг скриптүүд ажиллахаас өмнө хийдэг болохыг харуулж байна.

Алгоритм нь дараах байдалтай байна.
1. Сервер нь GET хүсэлтийг хүлээн авдаг: http://example.com/2005/12/31/theme.html
2. .htaccess доторх mod_rewrite хөрвүүлэх дүрмийг олно.
3. Өөрчлөлт.
4. Хөрвүүлэх дүрмийн дагуу index.phtml руу дахин чиглүүлнэ.
5. Скрипт ажиллаж эхэлнэ.

3. Энгийн жишээ.

Та нарын олонх нь энэ зүйлийг харсан байх: http://example.com/2005/12/31/theme.html. Ийм хаягийг ихэвчлэн мэдээллийн сайтууд ашигладаг. Мэдээжийн хэрэг, тэдэнд эдгээр бүх хавтас байхгүй html файлууд. Бүх өгөгдлийг скриптээр боловсруулдаг. Доор бид ийм өөрчлөлт хийх сонголтуудын аль нэгийг авч үзэх болно. Би чамд шууд хэлье. Маш олон сонголтууд байдаг, би зөвхөн нэг тохиолдлыг авч үздэг бөгөөд үүнийг би хамгийн түгээмэл гэж үздэг.

Код
RewriteEngine асаалттай
Сонголтууд +FollowSymlinks
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.phtml

Бүгдийг дарааллаар нь авч үзье.
Дараалсан хоёр RewriteCond нь хооронд нь AND байх нөхцөл юм.
Тэдгээр. Хүссэн хаяг нь бодит биш бол одоо байгаа файлэсвэл лавлахыг index.phtml руу шилжүүлнэ үү. Тэдгээр. Тиймээс бид http://example.com/2005/12/31/theme.html хүсэлтийг index.phtml скриптээр боловсруулна гэж хэрэгжүүлсэн. Одоо бүх асуулт бол хэрэглэгч /2005/12/31/theme.html хүсэлтийг скриптээс хэрхэн олж мэдэх вэ.

Энд уянгын хазайлт бий. RewrtiterRule-ийн талаар хэдэн үг хэлье. Удирдамж нь параметрийг авч үздэг. Эхнийх нь (манай тохиолдолд: ^(.*)$) нь хүссэн хаяг (бидний тохиолдолд: /2005/12/31/theme.html) загварт нийцэж байгаа эсэхийг шалгадаг тогтмол илэрхийллийн мөр юм (манай тохиолдолд тийм ээ). , өөрөөр хэлбэл k. Загвар нь мөрийн эхнээс төгсгөл хүртэл "0 ба түүнээс дээш удаа" гэж бичнэ - ^(.*)$). Хэрэв загвар хангагдсан бол mod_rewrite нь хүсэлтийг хоёр дахь параметрт заасан файл руу дахин чиглүүлдэг (бидний тохиолдолд: index.phtml).

Одоо бүх асуулт бол скрипт нь "/2005/12/31/theme.html"-ийн талаар хэрхэн мэдэх явдал юм. Хоёр сонголт байна.
Эхлээд:

Код
RewriteRule ^(.*)$ index.phtml?$1 [L]

"/2005/12/31/theme.html" нь QUERY_STRING хувьсагчийн index.phtml скрипт рүү шилжих учир $1 нь загварын эхний хаалт бөгөөд энэ нь: http://example.com/?/2005/12/31/theme.html-тэй тэнцэх болно. Гэхдээ та үүнийг хаа нэгтээ харсан уу? Үгүй Тиймээс бид QSA-г түлхүүр болгон ашигладаг.

Үргэлж GET хүсэлтийг (/2005/12/31/theme.html) агуулсан REQUEST_URI серверийн хувьсагч (скриптүүд хандах боломжтой) байдаг. Хэрэв бид index.phtml руу чиглүүлбэл REQUEST_URI нь index.phtml-ийн утгыг авах ёстой ГЭХДЭЭ QSA түлхүүр нь үүнийг "/2005/12/31/theme.html" гэж солино. Тэдгээр. бид физикийн хувьд index.phtml руу чиглүүлж, хэрэглэгчийн хандсан “/2005/12/31/theme.html” скриптийг логикоор харуулдаг.

4. Скрипт хийх

Одоо бид дахин чиглүүлсэн скрипт болох index.phtml-тэй аль хэдийн ажиллаж байна. Би танд шууд хэлье, код нь PHP дээр байгаа, учир нь ... Би бусад вэб хэлээр сайн ярьдаггүй.

Ийм энгийн. Одоо та энэ массиваар ажиллах боломжтой. Үүнийг илүү тодорхой болгохын тулд. Би танд нэг зүйрлэл хэлье. Энэ хаягийг бодъё: http://example.com/index.phtml?year=2005&m...y=31&news=theme . Бидний мэдэж байгаагаар скрипт дээр эдгээр параметрүүдийг $_GET массиваар дамжуулан авах боломжтой.
Тэгэхээр $_GET['year'] нь $arr, $_GET['сар'] нь $arr, $_GET['day'] нь $arr, $_GET ['theme'-тэй ижил байна. ] нь $arr-тай адилхан (та ".html"-г таслахад л хангалттай).

5. Энэ хандлага болон mod_rewrite ерөнхийдөө юу өгдөг вэ?

Юуны өмнө хайлтын системүүд http://example.com/?/2005/12/31/theme.html гэх мэт URL нь http://example.com/index.phtml?year=2005&m...y=31&news=theme-ээс хамаагүй сайхан юм. , мөн хэрэглэгчдийн хувьд та зөвшөөрөх ёстой.

Хоёр дахь цэг. Mod_rewrite-ийн тусламжтайгаар XSS халдлага хийх магадлал бараг юу ч болоогүй, учир нь Оруулсан алдаа нь практикт хамрагдсан. Энэ жишээн дээр энэ нь тийм ч тод харагдахгүй байгаа ч миний үгийг хүлээж аваарай, тийм байна. ГЭХДЭЭ ямар ч тохиолдолд таны толгойноос бүх зүйл шалтгаална!!!

Гурав дахь зүйл бол үнэхээр ашигласан технологийг нуух явдал юм. Энэ нь хэсэгчлэн сайтыг хакердах нь илүү хэцүү болгодог, гэхдээ энэ нь зогсонги цөөрөм дээрх шавар шиг зөвхөн дээд хязгаар юм.

6. Боломжит алдаа

Ихэвчлэн дараах алдаа гарч болно:

404 - баримт бичиг олдсонгүй. Шалтгаан: Дахин бичих дүрмүүд идэвхждэггүй.
403 – Хориотой – хандалтыг хориглосон. Дахин бичих дүрмүүд нь ямар ч хандалт байхгүй файл руу дахин чиглүүлэх оролдлогын улмаас үүсдэг логик алдааг агуулдаг (/index.php - яг үүнийг өгөх болно, учир нь / in UNIX системүүдЭнэ нь SERVER-ийн үндсэн лавлахаас гарах зам гэсэн үг бөгөөд танд хандах боломжгүй болно).
500 - Дотоод серверийн алдаа. Үүний шалтгаан нь .htaccess файлын синтаксийн алдаа юм.

7. mod_rewrite судлахад зориулсан Алма Матер

Хувь хүнийхээ хувьд энэ нийтлэл надад их тус болсон. Энд түүний хураангуй, доор би ZIP файл хавсаргаж байна. Энэ нийтлэл нь RTF форматтай,

Ишлэл
"mod_rewrite-ийн танд өгдөг гол давуу тал бол Sendmail-д байдаг тохируулга, уян хатан байдал юм. Урвуу тал mod_rewrite нь Sendmail-ийн тохиргоо болон уян хатан байдлыг авчирдаг."

Брайан Бэлендорф

Апачи групп
"Маш олон жишээ, баримт бичгийг үл харгалзан mod_rewrite бол Voodoo юм. Хараал ид дажгүй Voodoo, гэхдээ Vudu хэвээр байна."

Брайан Мур
[имэйлээр хамгаалагдсан]

mod_rewrite ертөнцөд тавтай морил, швейцарь хутга URL хөрвүүлэлтүүд!
Энэ модуль нь URL хувиргалтыг шууд гүйцэтгэхийн тулд дүрэмд суурилсан хөдөлгүүрийг (ердийн илэрхийлэлд суурилсан задлан шинжлэгч) ашигладаг. Энэ нь URL хувиргалтын жинхэнэ уян хатан, хүчирхэг механизмыг хэрэгжүүлэхийн тулд хязгааргүй тооны дүрэм, дүрэмтэй холбоотой хязгааргүй тооны нөхцлийг дэмждэг. Шийдвэрлэх URL нь серверийн хувьсагч зэрэг янз бүрийн шалгуураас хамаарч болно. орчны хувьсагч, HTTP гарчиг, цаг, тэр ч байтугай өөр өөр форматтай гадаад мэдээллийн баазын хүсэлтийг ашиглан таны хүлээлтэд нийцсэн URL хөрвүүлэлтийг хийж болно.

Энэ модуль нь серверийн контекст (httpd.conf) болон лавлах контекст (.htaccess) хоёуланд нь бүрэн URL (замын мэдээллийг оруулаад) дээр ажилладаг бөгөөд үүний үр дүнд асуулгын мөрийн хэсгүүдийг үүсгэж болно. Хөрвүүлсэн үр дүн нь дотоод боловсруулалт, гадаад хүсэлтийг дахин чиглүүлэх, тэр ч байтугай дотоод прокси модулийг дамжуулж болно.

Гэсэн хэдий ч энэ бүх функциональ байдал, уян хатан байдал нь сул талтай байдаг: нарийн төвөгтэй байдал. Тиймээс энэ модулийг бүхэлд нь нэг өдрийн дотор ойлгоно гэж битгий бодоорой.
Энэхүү модулийг 1996 оны 4-р сард боловсруулж, бичсэн бөгөөд 1997 оны 7-р сард зөвхөн Апачи группт хандивласан.

Ральф С. Энгельшалл
[имэйлээр хамгаалагдсан]
www.engelschall.com

Чухал:

    Файлын дэмжлэг ".htaccess"Зөвхөн Линукс хостинг дээр ашиглах боломжтой. Функцийг байршуулсан Windows дээр ".htaccess"файлыг гүйцэтгэдэг web.config.

    Дэмжих модуль ".htaccess"Линукс үйлдлийн систем дээр суурилсан бүх хуваалцсан хостинг төлөвлөгөөнд ашиглах боломжтой. Хэрэв та CMS суулгах үед дэмжлэг байхгүй гэсэн мессеж хүлээн авбал ".htaccess"зүгээр л тоохгүй.

Надад .htaccess файл байхгүй, би яах ёстой вэ?

Хэрэв та Apache вэб серверийг тохируулж байгаа боловч файлгүй бол .htaccess, үүнийг үүсгэж, шаардлагатай удирдамжийг бичнэ үү.

Үүсгэхийн тулд .htaccess, зааврын дагуу хостинг удирдах самбар руугаа нэвтэрнэ үү: Файлыг ол .htaccessнийтлэлийг ашиглан сайтын лавлах: .

Хэрэв та санамсаргүйгээр файл устгасан бол .htaccess, үүнийг сэргээх. Эсвэл нэмнэ үү стандарт файл .htaccessтаны CMS-ийн хувьд:

htaccess файл cPanel дээр харагдахгүй байна

Харахын тулд далд файлууд cPanel дээр (цэгээр эхэлж) та дараах зүйлийг хийх хэрэгтэй.

Мод дахин бичихийг хэрхэн идэвхжүүлэх вэ?

Модуль "mod_rewrite"бүгдэд нь үзүүлэв тарифын төлөвлөгөөЛинукс хостинг. Идэвхжүүлэхийн тулд "mod_rewrite"файлд нэмэх .htaccessмөр харах.

© 2024 ermake.ru -- Компьютер засварын тухай - Мэдээллийн портал