Server-side конфигуриране и скриптове
За този документ: Предназначение, Състояние (Какво ново?), Авторски права, Начин на ползване. Помогни!
Благодаря за всички коментари! Имайте в предвид че няма ли коментари - няма и ъпдейти!
За този документ
Предназначение
Информацията на тази страница е предназначена основно за хора които могат да правят конфигурационни промени на сървъра си и/или да използват сървърни скриптове.
Състояние
Съдържанието на тази страница не е финално. Информация ще се добавя от време на време.
Какво ново?
- 10 септември 2007
- Промяна в секция "Авторски права": вече не се изисква сочене на v111p.com като източник.
- 15 февруари, 2006
- Добавена е информация по проблема с Content Negotiation.
- 5 март 2005
- Публикуване.
Авторски права
Авторските права за тези страници принадлежат на v111p.com. Материалите могат да се копират свободно (с комерсиална или некомерсиална цел) само при условие че в копието ясно е посочен източника - v111p.com.
Можете да използвате тази информация свободно и не се изисква да цитирате v111p.com като източник. (10 септември 2007 г.)
Начин на ползване
- За да се ограничи объркването, препратки водещи към външни сайтове са означени с знак за по-голямо>.
- Ако искате да си запишете тази страница, не забравяйте и css файла! Редактирайте кода на страницата като замените
"/style.css"със"style.css".
Всяка помощ е добре дошла!
Всички коментари, предложения, връзки към полезна информация, поправки на фактологични, правописни и/или печатни грешки са добре дошли. За контакти можете да използвате формуляра за коментари намиращ се на дъното на всяка страница (по въпроси за конкретната страница) или да пишете на адрес v111p (at) v111p.com (ако очаквате отговор по e-mail).
Server-side конфигуриране и скриптове
Сървъри
Думата "сървър" (server) се използва с две значения - едното е "компютър, който изпълнява заявки за услуги през мрежата", а другото е "сървърно приложение" - самата програма която работи на този компютър и приема и изпълнява заявките.
Тестване на уебсайт
За да тествате сайта си на вашия компютър е добре да си инсталирате сървърно приложение. Ако използвате неща като PHP, CGI и т. н. ще трябва да си инсталирате необходимите допълнения отделно, или да използвате някой от готовите пакети които могат да се намерят в мрежата.
Apache
Най-разпространеният уебсървър е Apache>. Настройките в Apache се променят от файла httpd.conf. Ако това е позволено, част от конфигурацията на сървъра може да бъде променена и чрез поставяне на .htaccess файл с команди в някоя от директориите на уебсайта. Използването на такива файлове не се препоръчва, защото намалява производителноста (сървъра трябва да ги чете всеки път когато изпълнява заявка), но е необходимо ако искаме да направим промени в настройките, а нямаме достъп до главния конфигурационен файл.
Разликата между системни и Интернет адреси
Тази секция предстои да бъде написана
Сървърите имат различни опции за това как да определят един адрес към кой файл в системата да сочи. По подразбиране например адреса на директория връща определен файл (обикновено index.html), ако има такъв в съответната директория (ако няма обикновено се показва списък със съдържанието на директорията).
Content negotiation
Когато се използва content negotiation сървъра праща на браузъра най-подходящия за него документ, който съществува. Това е възможно, защото със заявката си браузъра праща и неговите предпочитания. Например, ако на сървъра има два файла с едно и също име, но различно разширение - ".html" и ".pdf", и браузъра изпрати заявка за файла без разширението, сървъра ще върне файла с разширението .html. Content negotiation се използва също и за изпращане на варианти на документи на различни езици. (Трябва обаче да се има в предвид, че е по-добре на потребителя да му се даде възможност да избере езика на документите без да се налага да променя опциите на браузъра си).
Content negotiation може също така да се използва и просто за скриване на разширението на файловете, например ако не искаме разширението .html да се вижда в адреса защото искаме по-късно да използваме .php скриптове и не искаме адресите на страниците да се променят. За това обаче има и други методи, който може да е за предпочитане да се използват.
Проблеми с "content negotiation"
Тук съм нахвърлял някои не много ясни бележки, но надявам се да са от полза
Тази тема е за "напреднали". На страницата на Apache можете да видите подробно описание и примери за това какво е content negotiation> (en).
Content negotiation води до някои проблеми с браузърите. Тук ще пише за проблемите с Content Location (хедър, който само някой браузъри поддържат) и кеширането.
Дискусии в форуми, където, както изглежда, са намерили решения за проблема с IE и кеширането: Internet Explorer caching problem>, IE not caching content-negotiated image>
Opera, а може би и някои други браузъри (но не и Fire Fox или IE) възприема истинския адрес за базов. Така връзки дори към елементи които би трябвало да са на същата страница ще сочат към друг адрес (където всъщност е същия файл). От друга страна IE отказва да кешира такива документи.
Проблема с Content-Location има едно лесно решение - тъй като базовият адрес в base елемента е с по-голям приоритет можем в него да зададем абсолютния адрес (без разширението) за всеки файл по отделно. В такъв случай обаче ще имаме същия проблем ако някои отвори файла с разширението (това не би трябвало да е проблем ако нямаме връзки към файлове с разширенията, например "file", а не "file.html"), или в зависимост от това дали ще напише адреса със или без www (за сайтовете които позволяват това - но тук е по-добре да ги препращате към единия адрес, например mysite.com към www.mysite.com или обратното).
Един от начините да се оправят нещата е да се премахнат хедърите които сървъра добавя при content-negotiation - Content-Location (създава проблема в Opera) и Vary (за IE). Това може да стане чрез следния ред в .htaccess файл: Header unset Content-Location или Header always unset Content-Location - за Apache 2.0.51 and later.
Как съм го направил аз? Ето моя .htaccess: MultiViews трябва да бъде изключен. Както се вижда това работи за разширения .php, .shtml, .html, но други лесно могат да бъдат добавени ако са нужни.
Options -MultiViews
DirectoryIndex index.php index.shtml index.html index.cgi index.pl
RewriteEngine on
RewriteCond /home/v111p/www/www%{REQUEST_URI}.php -f
RewriteRule ^([^.]+)$ $1.php [S=2]
RewriteCond /home/v111p/www/www%{REQUEST_URI}.shtml -f
RewriteRule ^([^.]+)$ $1.shtml [S=1]
RewriteCond /home/v111p/www/www%{REQUEST_URI}.html -f
RewriteRule ^([^.]+)$ $1.html
RewriteCond %{HTTP_HOST} ^v111p\.com
RewriteRule ^(.*)$ http://www.v111p.com/$1 [R=permanent,L]