Браузерозависимость |
||||
---|---|---|---|---|
Идеальный сайт выглядит одинаково во всех браузерах. Идеальный сайт выдает
каждому браузеру Если первое утверждение не нуждается в пояснениях и доказательствах, то со вторым возникает хитрый момент. С одной стороны, писать отдельный код под каждый браузер утомительно, но с другой, — еще более утомительной может оказаться «тонкая настройка» одного-единственного файла, чтобы он везде выглядел одинаково. Интересно, что второе утверждение Что выбирать — писать несколько файлов или пытаться создать переносимый код —
решать кодеру. Здесь рассказано о том, как настроить сервер, чтобы
он самостоятельно выдавал браузеру нужный файл. От Идею можно развить, дополнив сайт специальными файлами для поисковых систем и удалив из кода всю ненужную для поиска html-разметку. При этом размер файла скорее всего заметно сократится. Текстовое содержание всех файлов должно совпадать, если вы не преследуете иные цели. Настройка Apache Адреса ресурсов при такой организации документов выглядят очень аккуратно,
и скрывают (до некоторой степени) детали реализации. Например, в адресах
не будут видны расширения файлов
Чтобы не осложнять напрасно работу Веб-сервер может самостоятельно определять, следует ли различать браузеры или
нет — для этого нужно записать в конфигурационный файл
AddHandler dep-redir .dep Action dep-redir /cgi-bin/dep-redir.pl DirectoryIndex index.dep index.html Инструкция Таблица соответствий Например, файл зависимостей может выглядеть так (значения в строках разделены табуляцией): Opera index-op.html MSIE index-ie.html Netscapе index-nn.html Mozilla index-mz.html Lynx index-lx.html Порядок строк в этом файле имеет значение. Описанный далее обработчик
остановится, как только найдет первое подходящее название. Например, если
удалить первую строку, то для браузера Internet Explorer совпадет строка
Обработчик Фактически необходимо проделать некоторую дополнительную работу, чтобы
определить каталог, в котором находится запрошенный документ. Это можно сделать,
отбросив часть переменной
Найденное имя каталога следует обязательно указать при печати http-заголовка. Таким образом, реальный заголовок может иметь такой вид: Location: /cgi/browserdep/index-ie.html\n\n Поскольку в поле Пока еще ничего не было сказано о чтении файла с таблицей зависимостей.
Обработать его довольно просто. Локальное имя файла (в файловой системе сервера)
можно определить из переменной
По этой причине помимо файла
Полный исходный код скрипта-обработчика выглядит так (в соответствии
с записями в конфигурационном файле этот скрипт следует сохранить под именем
#!/usr/bin/perl my $user_agent = $ENV{'HTTP_USER_AGENT'}; my ($dir) = ($ENV{'REDIRECT_URL'} =~ m/(.*\/)[^\/]+$/); my $file = $ENV{'PATH_TRANSLATED'}; my $ret = ""; open DEP_REDIR, $file; foreach my $rule (<DEP_REDIR>) { my ($pattern, $redir) = split (/\t/, $rule); if ($user_agent =~ m/$pattern/i) { $realfile = "$redir"; last; } } close DEP_REDIR; $realfile = "index.html" unless $realfile; print "Location: $dir$realfile\n\n"; | ||||