ПредишенСледващото

Аз RewriteEngine винаги е била доста стресиращо тема. Едва наскоро, аз открих, че всички по някакъв начин се установяват и става малко или много ясен. Тъй като аз съм съвсем обикновен човек, аз съм сигурен, че ситуацията конфигурация грешка на уеб сървър "да", а аз не съм сам Бързам да споделят своя опит.

Оказа се, нещо между ръководството за използване на mod_rewrite модул и един вид наръчник за конфигуриране на уеб сървъра посредством .htaccess файла. По пътя, бих искал да се съсредоточи върху особено трудни или не-очевидни точки.

Базови данни за експерименти



  • Всички експерименти са били извършени на локалния хост.
  • Инсталирана сървъра lampp
  • Apache Версия: 2.4.9 (Build за Unix)
  • В папката / изберат / lampp / htdocs / BBB / _engine е опитен сайт engine.bbb.ru домейн. Това е главната папка (DocumentRoot).
  • В главната папка на сайта е само една страница ind.php.
  • Сайтът има папка / изберат / lampp / htdocs / BBB / _engine / местни.
  • Това е скрипт ind1.php на

Конфигуриране на виртуални хостове


За да направи по-лесно да работи, отстраняване на грешки, и помаха с техните нерви, където не можеш да направиш, че би било добре да се създаде виртуални хостове от гледна точка на удобство. Помислете за най-простата конфигурация, което значително улесни живота ни.

Конфигуриране на трупи


Малко хора на локалния хост само един домейн. Домейни обикновено много. Би било хубаво да споделите записите на домейна и в дните, че те не растат прекалено. Това се постига чрез част от нашия сървър конфигурация.

За да влезете грешки на нашия домейн, ние добавяме следните два реда.


Първият е на името на дневника грешка за виртуален сървър и прави като се започне нов дневник на всеки 86,400 секунди. Rotatelogs е програма, която обикновено се включва уеб сървъра Apache, и аз се надявам, че имате това също е инсталиран.

Вторият ред определя формата на всеки ред от дневника грешка. Подробности могат да бъдат намерени в документацията за сървъра Apache. Там всичко е съвсем ясно. В тази статия, че е важно да се поддържа само в ума, че форматът се настройва.

За достъп до дневника на I включва само един ред. Форматът на линия "по подразбиране" Аз съм обикновено щастлив.


И в двата случая, обърнете внимание на пътя към програмите на уеб сървъра и да трупи. Трябва да инсталирате на тези пътища, които съществуват на вашия компютър.

Най-общата информация за това как работят нещата


в .htaccess файла. кой ще управлява тази папка. В допълнение, ние имаме други линии под тази директива и някои правила за пренаписване.

Да предположим, че сървърът получи на входа на URL. RewriteEngine започва този URL проверен с помощта на правила. Той го прави от горе на долу в ред. Ако входящото URL адреса не отговаря на всяко правило, това се нарича "пас". Например, да предположим, че имаме в главната папка на файла index.php. Ако на входа Ури "/index.php" не отговаря на някое правило, ще видим в продукцията браузър на този скрипт.

Ако имаме следното правило


очевидно е, че това правило за «index.php» Ури работа. В този случай, Ури ще бъде пренаписана за "" и новите URI "/" ще бъдат изпратени на входния сървъра. И на целия процес на прилагане на правилата, ще отида отново. Само ако URI "/" не отговарят на някое от нашите правило, ние виждаме това, което искаме. И ако се срещнат, той ще бъде пренаписан отново и отново всичко отначало.

Как флаг [L] на


Вероятно, този флаг прави особено много недоразумения. Наличието на флага предотвратява Ури тест вход на следните правила за него, ако това правило е работил. Това е всичко. Това означава, че ако нашата Ури «index.php» е тестван (обикновено е работил за него), а след това поради наличието на флага [L] ние се прекъсне всички последващи проверки, както и уеб сървър веднага произвежда пренаписване «index.php» -> "" и получава вход URI "/" ([вътрешно пренасочване]), и това се повтаря от самото начало, с първото правило. Ако този флаг не е налице, след пренаписването все още продължава и проверката продължава със следващото правило. Но Ури ще са се променили, и то е "/".

Разбирането на този процес веднага да се предотврати много циклични пренасочвания.

Но нека, дали написано по-горе означава, че ако не използвате флага [L], ние ще спестите време и на страницата ще бъде открит скоро? Ние се натъкнете на знамето [L] и трябва да премине отново по всички правила, без изключение, и ако не се сложи на знамето [L], след което ние ще направим за пренаписване правило задействан, ще отида до края на всички правила и в тази връзка?

Проверих. Тя не работи. При липса на знамена [L], модул, както се очакваше, за да замени Ури спъна правило продължава всички останали правила към края, а след това произвежда [вътрешно пренасочване] и все пак ще тече към тази Ури отново всички правила. Това се потвърждава и от това, което написахме по-горе. Това правило изглежда да има никакви изключения.

Заключение: винаги, когато по правило се задейства RewriteRule, има [вътрешно пренасочване] и повторно прилагане на всички правила. Този втори път започва или веднага след прилагането на правилото с флаг [L], или след изчерпване на всички правила, които работят, ако не знамена [L]. "Pass" ситуация черти, а това се нарича «премине през» само може да се случи, ако не е била прилагана не правило. Flag [L] наистина може да се намали времето за обработка на Ури и трябва да се използва, когато е възможно.

Какво е RewriteBase?


Това твърдение, по мое мнение, което е рекорд за неразбираемото! Аз ще я дам за тази награда! С оглед на това, имам две истории за това животно - къси и дълги. Кратка история за тези, които не искат да се занимавам с тези инструкции. Дълъг за интересуващите се.

разказ


Ако сте сравнително проста URL-пренаписване използвайки .htaccess файлове, аз препоръчвам винаги да се процедира по следния начин.


  • Да не се използва, описан от директивата изобщо.
  • Всички правилата на този адрес пренаписване винаги започва с наклонена черта (което показва, че Ури е по отношение на корена на сайта)
дълга история


Следващите процеси ще настъпят на пренаписване на:

В момента има:

  • Документ Root: / изберат / lampp / htdocs / BBB / _engine
  • Файлът .htaccess е там, в корена на документа

Молим URL engine.bbb.ru/ind.php

  • Service пренаписване ще доведе пътя на искания файл към своя път във файловата система, а именно за отказ / lampp / htdocs / BBB / _engine / ind.php
  • Извадете от тях префикс изберат / lampp / htdocs / BBB / _engine / (съвпада с пътя до папката, в която се намира .htaccess)
  • Ще се прилагат правилата на пренаписване, използвайки «ind.php» Онлайн

Ако папката / изберат / lampp / htdocs / BBB / _engine / местно не .htaccess файл или има, но тя не е включена RewriteEngine

  • Молим URL engine.bbb.ru/local/ind1.php
  • Service пренаписване ще доведе пътя на искания файл към своя път във файловата система, а именно възможността за неучастие / lampp / htdocs / BBB / _engine / местни / ind1.php
  • Извадете го от представката изберат / lampp / htdocs / BBB / _engine /
  • Ще се прилагат правилата за пренаписване, с помощта на поредица «местно / ind.php»
Ако папката / изберат / lampp / htdocs / BBB / _engine / местно .htaccess файл и той да е активиран RewriteEngine

  • Молим URL engine.bbb.ru/local/ind1.php
  • Service пренаписване ще доведе пътя на искания файл към своя път във файловата система, а именно възможността за неучастие / lampp / htdocs / BBB / _engine / местни / ind1.php
  • Извадете го от отказване на префикс / lampp / htdocs / BBB / _engine / местни / (това е пътя до папката, където .htaccess файла в директорията / местно)
  • Ще се прилагат правилата на пренаписване, използвайки «ind1.php» Онлайн

Внимание! Този алгоритъм ще се изпълнява винаги. Този алгоритъм изразява специфичния характер на термина "на-реж", т.е. "в ръководен подход", присъщи на сървъра Apache. Значение директива RewriteBase го е направил (в алгоритъма) не е засегната.
На същата директива ефект RewriteBase?


Тя трябва да бъде много добре да се помни, че директивата RewriteBase определен URL! Вие не можете да определите къде "местен /" Това е грешка! Можете да се "/ местен".

Нека ни /opt/lampp/htdocs/bbb/_engine/local/.htaccess посочихме


Молим URL engine.bbb.ru/local/


Тя работи! И това ще бъде преход към Ури /local/ind1.php


също работят, но преходът ще се извършва въз /ind1.php Ури. Файлът не е намерен! Такава Ури (по отношение на схемата на сайта), ние не!

Заключение 1: URL, който посочи в RewriteBase добавен като префикс за целта в Ури, ако това е относително, тоест, в началото има наклонена черта.

Заключение 2: Ако никога не използваме относителния мишена Ури в правилата, а след това RewriteBase на директива ние не се нуждаят!

Заключение 3: Ако използваме «RewriteBase /», а след това правило се задейства


Ще се опита да премине в /ind1.php Ури. Ние просто използвайте "/" като префикс.

Ние имаме следните правила RewriteEngine в основната .htaccess:

Ако RewriteBase е urlom, тогава нека да зададете


Не. Тя не минава. Грешка "RewriteBase: аргумент не е валиден URL". Странно, нали? Но не се отказвайте! Промяна RewriteBase!


В този случай, няма грешка! Това, което сме се случва с начините? Много интересно!
Сървърът получава справедлив начин за / изберат / lampp / htdocs / BBB / _engine /. премахва префикс / изберат / lampp / htdocs / BBB / _engine / и работи с празен низ ( "").
Ние се натъкнете на правилото и да промените празния ред на "ind.php"
Честно казано добавяте префикса "//bbb.ru" и да преминете към следващия проход. Този втори пасаж е еквивалентно на повикване engine.bbb.ru//bbb.ru/ind.php. че като цяло не е това, което ние искахме (това беше първоначалната желание skaknut към друг сайт). С две думи, идеята не се отплати. В резултат на това ние имаме 404, което е логично. Между другото, "//", ние сме в процес на пренаписване на сървъра заменя с "/". Проследяване на този пример е даден много по-ниски.

Имам всички изумителни подробности от интимния живот на сървъра Apache? Или най-накрая отстраняване на грешки


Наистина! Видях грешка, която дава услуга за преименуване на URL адреси? В края на краищата, това е за отстраняване на грешки! Има някои много полезни насоки, които натрупах в един виртуален хост за engine.bbb.ru на домейна. а именно,

И това, което е "предупреди"? Буквално ни влизане LogLevel означава, че всички модули предупреждават процент грешки и само за пренаписване модул - trace4

Това, което се получи като резултат от включването на отстраняване на грешки?

Си представям пренаписване проследяване на следните условия:

Отстраняване на грешки е валидна за виртуален хост, за която съдържа


Ако engine.bbb.ru домейн използва външни стилове CSS, които са взети от bbb.ru. домейн и това е проблема, а след това не включва отстраняването на грешки в рамките на виртуалната engine.bbb.ru сървър, и трябва да бъдат включени в виртуален сървър bbb.ru. на Тогава всички обаждания към домейна bbb.ru трябва да се търсят в журналите на грешки (без достъп!) Bbb.ru. домейн В този случай, призовава към проследи обекта не е в журналите на достъп на всички!

И не можете да използвате такава стресова RewriteEngine изобщо?


Можете да преминете към използване само на един скрипт на целия сайт и да направи цялата го пренаписване. В PHP, за да го направи по-лесно и много по-лесно отстраняване на грешки. Освен очевидните предимства в областта на сигурността на сайта, ще получите удобството без да се налага пренаписване. За да отидете на такава схема на работа, ни .htaccess трябва да бъде по този начин:

И в сценария dispatch.php Аз силно препоръчваме да не забравите да изключите директно извикване на dispatch.php.

Ако изведнъж искат този подход да се приеме, тогава аз препоръчвам скрипт dispatch.php нарича по друг начин. Използвах това заглавие само за илюстративни цели.

Между другото, този подход се реализира доста активно. Това трябва да сме благодарни за въвеждането на CNC (URL адреси, четима за човека, но за мен лично това е много ясно). На практика той вече е в сила във всички съвременни двигатели.

Счупете отворен D-Link DIR-890L
В последните 6 месеца съм бил страшно зает и не следват нови глупости от D-Link. За да се позабавляваме, аз отидох на сайта им, и аз бях посрещнат от този кошмар: най-лудото рутер D-Link DIR-890L 300 $ Може би най-"луд" в рутера е, че той работи все едно zabagovannoy фърмуера, D-Link правоприемници

правила RewriteRule за отстраняване на грешки, или малко за интимния живот на mod_rewrite

Автоматични пакети монтажа на CMS Joomla!
Преди да започна работа по настоящия проект, аз не мисля, че някога съм се наложи да използвате инструменти за автоматично изграждане на проекти. В крайна сметка, аз работя изключително с интерпретирани езици, които не изискват компилация. Въпреки това, както се оказа, те могат да бъдат полезни при разработването на PHP, и особено при работа с Joomla!

правила RewriteRule за отстраняване на грешки, или малко за интимния живот на mod_rewrite

Моята версия на .htaccess
В една от предишните ни публикации в тематичната .htaccess за начинаещи, бих искал да предложи своя собствена версия с различни лечения и забрани, както и на структурирането на определена логика, а като кармата е на червено, а след това на разпространението е сега. Вашето внимание моите връстници правила за обработка на URL с обяснения и коментари като "защо?".

DDOS-бот в PHP ходи на сървъри
Днес, около два часа през нощта, когато аз исках да отида да спя, аз бях на Skype е написана от един от приятелите си. Миналата година Помогнах му да управлява някои от своите сървъри. В такъв късен час, той пише, че интерфейсът на мрежата на един от сървърите си е напълно запушена, ако се съди по графика за MRTG. И видях, наистина, не можех дори да достигне

правила RewriteRule за отстраняване на грешки, или малко за интимния живот на mod_rewrite

Подкрепете проекта - споделете линка, благодаря!