Что такое .htaccess (краткий обзор)
Файл .htaccess предназначен для индивидуальной настройки сайтов и их каталогов. Он может содержать почти все инструкции, допустимые в файле httpd.conf (главный файл конфигурации сервера Апач). В отличие от httpd.conf, который должен лежать в каталоге /usr/local/etc/httpd/conf (а к нему имеет доступ только администратор сервера), файл .htaccess может лежать и, будет обрабатываться в любом каталоге сайта (если его обработка разрешена администратором сервера). В отличие от httpd.conf, настройки которого распространяются на всех пользователей сервера (владельцев сайтов), файл .htaccess вносит локальные изменения в настройки, влияя только на каталог его содержащий, вместе с вложенными в него каталогами.Предлагается подробно рассмотреть все возможности использования данного файла, дабы на будущее ни у кого не возникало излишних вопросов.
Рассматривать будем по порядку, детально разбирая каждый вопрос.
1. Требования к файлу:1.1. .htaccess должен быть записан в формате ОС вашего сервера.
Подробнее..Дело в том, что в Windows и DOS перевод строки обозначается двумя спец-символами - "\r\n" (0x0D 0x0A или 13 10), а в UNIX одним - "\n" (0x0A или 10). Поэтому если на сервере стоит UNIX, то файл, написанный под Windows, работать не будет.
Поэтому его необходимо одно из следующего:
a) открыть в 16-ричном редакторе и запустить замену 0x0D на 0x20 (пробел в 16-ричном варианте).
b) Обработать файл данной функцией (php5):
<?php file_put_contents($filename, strtr(file_get_contents($filename, array("\r\n" => "\n")))); ?>
c) Создавать файл непосредственно на сервере с помощью php-скрипта.
d) Использовать ASCII-режим передачи данных в вашем ftp-клиенте.
e) Настроить ваш php-редактор так, чтоб он сохранял файлы в UNIX-формате.Вопросы для уточнения:a) Приведите примеры 16-ричных редакторов, которыми можно произвести описанную выше замену.
b) Какие еще существуют способы перевода файла в UNIX-формат?
c) Приведите универсальную функцию для создания файлов .htaccess в UNIX-формате.
UPD 20.02.08: основную часть вопроса мы разобрали, осталишь лишь незначительные детали.
при загрузке по FTP достаточно передать файл в ASCII-режиме.
a) Как спец символы 0D16 0A16 обозначаются в PHP?
0x0D == "\r"
0x0A == "\n"
0x09 == "\t"
b) В какой последовательности эти символы расположены в DOS и в какой в Windows?0A16 0D16 в DOS и 0D16 0A16 в Windows?
"\r\n" - маркер переноса строки и для Win, и для MS-DOS
<?php file_put_contents(strtr(file_get_contents($filename, array("\r\n" => "\n")))); ?> - вполне эффективный метод ))
а редактирование комментов глючит
при загрузке по FTP достаточно передать файл в ASCII-режиме.
А поподробней можно?
<?php file_put_contents(strtr(file_get_contents($filename, array("\r\n" => "\n")))); ?> - вполне эффективный метод ))
Ыыыы)) Оригинально)) А еще можно сделать php-файл, который сам создает .htaccess - такой метод используется при установке Гостевух и т.п.
, конечно же, сорри.
а редактирование комментов глючит
Ты про что?
Действительно, глючит))
наеобманули, что период нестабильности закончился)) раньше хотя бы можно было, задав URL вручную, попасть в редактирование комментов...* * *
так, еще раз:
<?php file_put_contents($filename, strtr(file_get_contents($filename, array("\r\n" => "\n")))); ?>
ээ... ты правда не знаешь?
я не в состоянии сейчас объяснить человеческим языком, поищи какой-нибудь мануал для любого FTP-клиента. Суть в том, что есть два метода (mode) передачи файлов по FTP - binary и ASCII (текст); в первом случае - файл сохраняется "как есть", а во втором FTP-сервер учитывает ОС клиента и ОС сервера и автоматически переводит переносы строки в те, которые понимаются конечным сервером.
Или пусть кто-ибудь за меня объяснит)
Кстати, у меня под WinVista (Win32) + Apache2.0 прекрасно понимаются .htaccess из Блокнота (т.е. с виндовыми переносами). Не путай читателей, переносы должны совпадать со стандартом ОС сервера, а не быть всегда в UNIX-стиле)
Ыыыы)) Оригинально)) А еще можно сделать php-файл, который сам создает .htaccess - такой метод используется при установке Гостевух и т.п.
я всегда так перевожу переносы строк, прямо через консоль.
я не в состоянии сейчас объяснить человеческим языком, поищи какой-нибудь мануал для любого FTP-клиента.
Да я впринципе понял суть)
Не путай читателей, переносы должны совпадать со стандартом ОС сервера, а не быть всегда в UNIX-стиле)
Ок, учту!)
file_put_contents только на php5.
file_put_contents только на php5.
знаю. В крайнем случае человек залезет в документацию или здесь спросит, что за ф-ия )
признавайтесь, кто еще в числе прочих не обзавелся самостоятельной реализацией file_put_contents/file_get_contents для php4?))
P.S. И меня искренне удивляет, что кто-то еще держится за php4...
FVA,
во-вторых, в моем php редакторе можно установить под какую ОС записывать файл.
о, кстати, я вот php-файлы сохраняю с unix-style переносами, но когда начал, был некий загон из-за переносов в строках внутри кода - никак не понимал, куда деваются байты.
В общем, если писать HTTP-запросы без использования "\r\n", или что-то binary safe, нужно быть аккуратным с переносами )
У меня хостер еще довольно нескоро перейдет на пхп5. ну.. бесплатно, что поделать.. зато можно лить до 90Гб ^^
Йа не обзавелся)) Меня и php5 устраивает))
о... мда. Я последний проект на php4.4.4 на общих правах делал в июле, а теперь всегда делаю наценку "за работу с устаревшей версией".
и вот как раз чтобы не мучиться каждый раз с адаптацией, у меня в библиотеке, общей для всех проектов, записано следующее %)
if (!function_exists("file_put_contents"))
{
function file_put_contents($filename, $s)
{
$fp = fopen($filename, "w");
fputs($fp, $s);
fclose($fp);
}
}
if (!function_exists("file_get_contents"))
{
function file_get_contents($filename)
{
return join("", file($filename));
}
}
?>
тупо и без обработки ошибок, каюсь, но большего обычно и не надо.
в php4.2.1 - нету) у меня есть один сайт под такой версией в поддержке ^^'
если верить документации, она с 4.3.0.
кстати говоря, любой нормальный фтп клиент умеет сам определять тип передачи для различных файлов
Если можно, список "нормальных клиентов" =)
в моем php редакторе можно установить под какую ОС записывать файл.
Ну и название редактора заодно
La personne mystique
P.S. И меня искренне удивляет, что кто-то еще держится за php4...
Скажи это хостинг-провайдерам)) У меня вот тоже php 4.4... По крайней мере до лета)
никак не понимал, куда деваются байты
Хм.. Я мельком глаза заметил, что при переносе файла на сервак его рамер изменяется -так вот в чем дело!
и вот как раз чтобы не мучиться каждый раз с адаптацией, у меня в библиотеке, общей для всех проектов, записано следующее %)
Спс за ф-цию))
diary.ru/~ruweb/?comments&postid=37490913 - никогда не слышал про FTP Voyager и lftp (это под Линь?), остальные однозначно поддерживают.
правда, настройки по умолчанию для автоопределения типа трансфера у них немного разные, поэтому, "во избежание" вещей типа появления пустых строк в шахматном порядке, лучше пользоваться каким-то одним ^^
никогда не слышал про FTP Voyager и lftp (это под Линь?), остальные однозначно поддерживают.
Я помоему список из Википедии брал.. Так что сам знаком только с CuteFTP и Тоталом =)