член mod_rewrite
Създаване на връзки с mod_rewrite "разбираем" за търсачките.
Mod_rewrite не може да променя адреса в браузъра на потребителя
Също така е важно да се разбере, че mod_rewrite работи с URL адреса след като сървърът получава заявката HTTP и преди изпълнението на скрипта или преработени съдържание. По този начин, mod_rewrite да промените пътя на файла на сървъра и променливите, свързани с искания URL адреса, но не може да променя съдържанието изпратена до сървъра.
Как да променя динамично URL на статично
Тук е алгоритъм, който трябва да се извърши, за да създадете статични URL на динамични сайтове:
- Конвертиране на всички връзки към всички страници в статична формат. Това обикновено се прави чрез промяна на базата данни или скрипт, който генерира тези страници. В някои случаи тази задача се справят бързо PHP функция - preg_replace ().
- Добави към файла httpd.conf или .htaccess правила mod_rewrite за вътрешния трансформацията на статични URL, които са били поискани от клиента, динамична форма е необходимо да се обадите поколение скрипта за съдържание.
- Добавяне на допълнително mod_rewrite код за насочване на клиентски заявки за динамично URL и да ги (външно пренасочване) пренасочи към съответния статичен URL. За да направите това, използвайте пренасочванията 301 ( "преместена за постоянно"), която уведомява търсачките, че на мястото на стария динамичен URL адрес, които искате да използвате новата статична. Също така, на външен пренасочване пренасочва посетителите, които идват към вашия сайт с помощта на стария динамична връзка от отметките си.
С оглед на гореизложеното, можем да се досетим, че и двата формата: на динамични и статични Той трябва да съдържа цялата информация, необходима за конвертиране в друг формат. И не забравяйте, че един внимателен подбор на "дизайн" статичен URL в бъдеще може да ви спести много проблеми, както и намаляване на броя на циклите на процесора, което може да се развива силно по време на нелеп изпълнение на такава трансформация.
вАЖНО СЪОБЩЕНИЕ
Целта на тази статия не включва обяснение на принципите на работата на регулярни изрази и mod_rewrite модул. Документация за mod_rewrite и много други ръководства са лесно достъпни за всички желаещи.
Опитът е да се използва mod_rewrite без пълното знание на тази документация - първа стъпка (а често и последен) до сериозни проблеми. Не забравяйте, че mod_rewrite въздействие върху вашата конфигурация сървър и доста печатна грешка или логично, да направите сайта си недостъпен за посетители или бързо да намалите класиране в търсачките. И ако вашият доход зависи от сайта, а след това най-вече трябва да се разгледа цялата документация внимателно.
Научете повече за регулярните изрази може да се намери в книгата "Самоучител регулярни изрази", които можете да си купите в Болеро, или в Amazon
По-долу е пример, който може да се използва като основа за изграждане на собствените си решения.
например работа
index.php продукт = widgetcolor = bluesize = smalltexture = fuzzymaker = widgetco: стари динамични URL формат?
Нов URL статичен формат: / продукт / джаджа / синьо / малки / размита / widgetco
mod_rewrite код. използвана в .htaccess:
Имайте предвид, че думата "продукт" винаги присъства в статичен и динамичен формат. В този случай, mod_rewrite по-лесно да се определи заявките, в които е необходимо да се прилагат посочените по-горе правила. Други методи, като например проверка за файл съществуване, могат да се използват, но те са по-малко ефективни и по-податливи на грешки сравнение.
Разликите между използвайки .htaccess и httpd.conf
Ако използвате mod_rewrite правила в httpd.conf конфигурационния файл контейнер. След това трябва да добавите регулярен израз двете директиви RewriteRule наклонена черта (/). Така например, необходимостта да се промени "RewriteRule ^ index.php $" на "RewriteRule ^ / index.php $". Също така не забравяйте, че трябва да рестартирате сървъра за промените в конфигурационния файл, за да влезе в сила.
Как работи това
Сега нека видим как паяк търсачката посети сайта използвате стария динамичен URL адрес:
Поставянето правила mod_rewrite
Към горния код се работи правилно, тя трябва да бъде поставен в .htaccess файла в същата директория като /index.php. Тя може да бъде поставен в контейнер в httpd.conf. който се отнася до тази директория.
регулярни изрази
Тук ще дам само един коментар на регулярни изрази, използвани по-горе. Аз се избегне използването на много прост и популярен, но е много неефективни структури "(. *) / (. *)". За използването на няколко структури. "*" Е много неефективно в регулярните изрази.
Причините за това са две. Първите - ". *" Означава "да се заменят с произволен брой всеки символ." И второ - дизайнът е много "лаком", което означава, че шаблонът ще бъде заместен в максималния възможен брой на символите "*.". Това от своя страна означава, че преди исканата URL адреса ще съвпадне или не съвпада с регулярен израз, ще има множество пермутация, броят на които е равна на (броят на символите между "/" и в края на исканата URL минус 2), умножена по (номер "(. *) "минус едно). Това е лесно да се направи регулярен израз с най-различни "(. *)". анализа на които ще изисква десетки или дори стотици пасове.
Нека да разгледаме един бърз пример. Обратна връзка $ 1 съдържа знаци, които са заместени в първия "(. *)". и $ 2 - символи се заместват във втория:
Общи проблеми
при тестване проблеми
Що се отнася до .htaccess. и до httpd.conf преди тестване на всякакви промени, не забравяйте да изчистите кеша на браузъра си. В противен случай, браузърът ви ще се справят с един от най-рано исканите страници от кеша. Ясно е, че в този случай, новия код няма да бъде изпълнена.